Bits,Bytes,and Integers
1.Bit比特:
计算机以比特为基本单位存储信息,以比特位表示所有数字。
2.二进制的数字表示
二进制数仅由0和1组成,基数的基数为N=2。
3.编码一个字节以及16进制表示
一字节由八比特组成,所有数据由字节组成
4.C中数据类型的长度
5.布尔代数
当操作连续的比特时,可认为是对每个比特位使用布尔操作,即进行&(and),|(or),^(异或),~(非)操作.
6.逻辑操作和位操作的对比
逻辑操作中,任何非零的值在逻辑上都被看作TRUE,只有值为零时被看作FALSE。
7.移位操作
逻辑右移:即右移时左边补零
算数右移:即右移时左边补最高位的值
对于无符号数,必须使用逻辑右移;对于有符号数,原则上两种右移都可以采用,但实际中几乎所有编译器都使用算数右移。
8.数字表示
B2U:从比特位模式转化为无符号数的编码表示(将加权位求和,每个比特位用2的幂来加权)
B2T:从比特位模式转化为有符号数的编码表示
对有符号数,采用补码的形式表示。
c语言默认有符号数和无符号数比较时,都转为无符号数。
无符号与有符号数在值不同时相差2^w个数,w为字长。
9.C中有符号数和无符号数的相互转换
C中符号数转换有两种方式:隐式类型转换和显式类型转换(强制类型转换)
隐式类型转换:C中默认的转换方式,如signed类型与unsigned类型比较时signed类型会转换为unsigned类型,其表示的十进制数也会发生改变。
例如:
`unsigned i;
for(i = cnt-2; i >= 0; i--)
a[i] += a[i+1];
因为x为无符号数,所以x永远大于0,程序会一直循环下去
10.有符号数的扩展
有符号数在拓展时,在高位补充符号位。
将一个大的数据类型转换为小的数据类型时,有符号数不仅数值大小可能变化,符号位也可能发生改变。