(1)extern:声明一个变量,但不占用内存,所以不能赋值。
(2)define:预处理里展开,用gcc -E 看预处理后的文件,就知道以后尽量不要用define,改用enum和常量或者inline。
(3)bit(位):一个二进制代表一个位,一个位只能表示0或1两种状态。数据传输是习惯以“位”为单位的。
Byte(字节):一个字节为8个二进制,称为8位,计算机中存储的最小单位是字节。数据存储是习惯以“字节”为单位。
所以注意MB和Mb的区别,宽带都是以Mb为单位的。
(4)计算机源码补码反码。
源码:原始的二进制位。但是有正负数,所以最高位为符号位(0代表正数,1代表负数)
带来的问题:(1)0有两种存储方式;(2)正数和负数相加,结果不正确(计算机只会加不会减)
eg:1(0000 0001) + -1 (1000 0001) = -2 (1000 0010)
反码(为了算补码):正数的源码和反码一样,而负数在源码基础上,符号位不变,其他位取反。反码计算后的结果也是反码。
反码存储带来一个为题:0有两种存储方式
补码:计算机以补码方式存储(解决负数存储):整数的源码反码补码都一样,对于负数,其补码为它的反码加1
十进制,都是站在用户角度去看,源码
二进制、八进制、十六进制是站在计算机角度去看,补码
补码如何求源码:
(1)先对补码求反码
(2)在1的基础上加1
eg:char a = 0x81;printf("a=%d",a); 输出为-127
因为a在计算机中转化为二进制为10000001,而计算机都是以补码存储的,而现实要以十进制显示,则需要转成源码,所以结果为-127。
(5)有符号与无符号数的区别:有符号数最高位作为符号位,无符号数最高位作为数值的一部分。&d为有符号数输出,%u为无符号数输出。
(6)sizeof是一个运算符,不是函数。
(7)volatile:
(8)register: