位移运算符用法

位运算符都是对二进制位操作的运算符,所以它只能对整形(包括字符型)数据运算,运算前也需转换为二进制。移位原则,移出的位数全部丢弃,移出的空位补入的数与左移还是右移有关。如果是左移,则规定补入的数全部是0;如果是右移,还与被移位的数据是否带符号有关。若是不带符号数,则补入的数全部为0;若是带符号数,则补入的数全部等于原数的最左端位上的原数(即原数的符号位)。

在移位运算符前,先理解下带符号位的表达方式。一般是用补码表示,即负数等于其绝对值的原码按位取反然后加1,因为正数符号位为0,所以负数符号位为1,符号位在最高位。例如:

-5的绝对值5的二进制码为:0000 0000 0000 0101(为节省输入,以16位系统为例,下同。),原码取反为:1111 1111 1111 1010,取反后加1为:          1111 1111 1111 1011

1. 左移运算符 <<

4 << 3 结果为:4的原码 0000 0000 0000 0100 向左移三位为:0000 0000 0010 0000,转换为十进制数为:32

7 << 4   结果为:7的原码 0000 0000 0000 0111 向左移四位为:0000 0000 0111 0000,转换为十进制数为:112

-3 << 2  结果为: -3的补码 1111 1111 1111  1101 向左移两位为: 1111 1111 1111 0100,转换为十进制数为:-12

从上面来看,左移位后的结果就是,移位前的十进制剩以n次2(n为需移位的位数),符号位不变。

 

2. 右移运算符 >>

5  >> 2 结果为:5的原码:0000 0000 0000 0101 向右移两位为:0000 0000 0000 0001,转换为十进制数为:1

3 >> 3  结果为:3的原码:0000 0000 0000 0011 向右移三位为:0000 0000 0000 0000,转换为十进制数为:0

-4 >> 5 结果为:-4的补码为:1111 1111 1111 1100 向右移五位为:1111 1111 1111 1111,转换为十进制数为:-1

-7 >> 4 结果为:-7的补码为:1111 1111 1111 1001 向右移四位为:1111 1111 1111 1111,转换为十进制数为:-1

当不带符号数右移时,移位数超出有效位时,结果为0;带符号位数右移时,移位数超出有效位时,结果为-1。

posted @ 2010-10-06 20:49  jeff_nie  阅读(1107)  评论(0编辑  收藏  举报