关于左移右移的操作 学习

 

左移操作符<<,  右移又叫做“有符号”右移-》符号若为正,则在最高位插入0,符号若为符则在最高位插入1;

不论对于正数还是负数<<i  就等于该数乘以2^i  (这里保证不超数据类型)

而对于右移操作来说就有些奇葩复杂了:

首先右移不会改变符号位:

正数右移就是对他的二进制原码右移然后补零的操作;

而负数就麻烦了,首先负数的右移是对其补码的右移然后补1的过程:

例如-3>>1

源码:1(符号位)0000000000000000000000000000011

反码:1(符号位)1111111111111111111111111111100

补码:1(符号位)1111111111111111111111111111101

右移一位前边补1:1(符号位)1111111111111111111111111111110

然后还原:-1的:   1(符号位)1111111111111111111111111111101

              取反:  1(符号位)0000000000000000000000000000010

             得:-2

 

 

 

posted @ 2013-03-29 09:56  E_star  阅读(748)  评论(0编辑  收藏  举报