在计算机科学的领域中,数据总是以二元的状态呈现,即0或1,这也有利于电路中高低电平的表示。
1.2 二进制详解
十进制与二进制的转换
在计算机中,最小的数据存储单位是位(bit),而八个位组成了一个字节(byte)。其中,最左边的位通常用作符号位,用以区分正数和负数。
原码、反码与补码
原码就是数据的实际值,例如1的原码为0000 0001,-2的原码为1000 0010。但计算机中真正用来存储和计算的其实是补码。例如,8位二进制数能表示的最大范围是[-127, 127]。
正数的反码和原码相同,负数的反码是在原码的基础上符号位不变,其余位取反。补码则是基于原码的基础上进行修正。如1的原码、反码、补码均相同;而-2的补码则通过特定的计算得出。
计算示例与溢出问题
-35加上-128的结果如何通过补码计算?当计算结果超出8位二进制能表示的范围时,就发生了溢出。如溢出后结果的实际取法,以及如何理解溢出的规则。
位运算基础
位运算包括按位与(&)、按位或(|)、按位异或(^)以及右移(>>)和左移(<<)等操作。
按位与运算
例如:1的二进制形式0000 0001与3的二进制形式0000 0011进行按位与运算的结果仍为1的二进制形式。
按位或运算
同样地,进行按位或运算时,只要有一个数为1,则结果为1。
按位异或运算
当两个相应的二进制位相异时,异或运算的结果为1。
移位运算
右移是在保持符号位不变的情况下丢弃低位,并补上高位。左移则是保持符号位不变而低位补齐。