二进制补码表示法
几乎所有的计算机都使用二进制补码表示法来存储位于n位存储单元中的有符号整数。
在二进制补码表示法中,最左位决定符号。如果它是0,该整数为正(即非负);如果是1,该整数为负。
两种运算:
以二进制补码格式存储整数,计算机遵循以下步骤:
以二进制补码格式还原整数,计算机遵循以下步骤:
二进制补码表示法只有一个0。
位逻辑运算符
1° 二进制反码或按位取反:~
2° 位与(AND):&
对于每个位,只有两个操作数的对应位都为1时结果才为1(用真/假来描述,只有两个位操作数都为真结果才为真)。C也有一个组合的位与-赋值运算符:&=,例:
val &= 0377; val = val & 0377;
3° 位或(OR):|
对于每个位,如果其中任意操作数中对应的位为1,那么结果位为就为1(用真/假来描述,如果任意一个位操作数为真,或两个都为真,那么结果为真)。C也有一个组合的位或-赋值运算符:|=
4° 位异或:ˆ
对于每个位,如果操作数中的对应位有一个为1(但是不都为1),那么结果为1(用真/假来描述,如果两个位操作数中有一个为真,但是不都为真,那么结果为真)。C也有一个组合的位异或-赋值运算符:ˆ=
移位运算符
1° 左移:<<
左移运算符<<将其左侧操作数的值的每位向左移动,移动的位数由其右侧操作数指定。空出的位用0填充,并且丢弃移出左侧操作数末端的位。可以使用左移-赋值运算符(<<=)来实际改变一个变量的值。该运算符将变量中的位向左移动右侧值大小的位置。
2° 右移:>>
右移运算符>>将其左侧操作数的值的每位向右移动,移动的位数由其右侧操作数指定。丢弃移出左侧操作数右端的位。对于unsigned类型,使用0填充左端空出的位。对于有符号类型,结果依赖于机器。空出的位可能用0填充,或者使用符号(最左端的)位的副本填充。右移-赋值运算符(>>=)将左侧变量的位向右移动指定数量的位置。
移位运算符能够提供快捷、高效的(依赖于硬件)对于2的幂的乘法和除法:
number << n | number乘以2的n次幂 |
number >> n | 如果number非负,则用number除以2的n次幂 |
原文:http://www.cnblogs.com/yerenyuan/p/5103708.html