补码、位移运算

正数、负数的补码算法一样

int a=25/-25;
取a的绝对值,转换为二进制即原码,正数的补码就是原码,负数补码就是原码取反,然后加1
数据在计算机中用补码表示

25 (0000 0000 0000 0000 0000 0000 0001 1001)

-25 (1111 1111 1111 1111 1111 1111 1110 0111)

算法:

0000 0000 0000 0000 0000 0000 0001 1001
1111 1111 1111 1111 1111 1111 1110 0110
+ 1
----------------------------------------
1111 1111 1111 1111 1111 1111 1110 0111


位移运算:


“>>”运算符作带符号的位移处理,它作位移处理时,会先将值向右移,并在高位填0,然后将位移后所空出的高位,全部改成原来的最高位的值(代表

正负号的位)。也就是说负的值位移后,仍然是负的值,比如:
25>>2 = 6

0000 0000 0000 0000 0000 0000 0001 1001
0000 0000 0000 0000 0000 0000 0000 0110


-25>>2 = -7

1111 1111 1111 1111 1111 1111 1110 0111
1111 1111 1111 1111 1111 1111 1111 1001 (位移之后的数据)
把二进制转换为整数
1111 1111 1111 1111 1111 1111 1111 1001
0000 0000 0000 0000 0000 0000 0000 0110
+ 1
----------------------------------------
0000 0000 0000 0000 0000 0000 0000 0111

“<<”运算符的所作的也是无符号的位移处理,同样地,它不会将所处理的值的最高位视为正负符号,它作位移处理时,会直接左移并在低位填入0。所

以第二高位以下的位若移到了最高位,该值的正负可能会与原来的不同。

25<<2 = 100

0000 0000 0000 0000 0000 0000 0001 1001
0000 0000 0000 0000 0000 0000 0110 0100

-25<<2 = -100

1111 1111 1111 1111 1111 1111 1110 0111
1111 1111 1111 1111 1111 1111 1001 1100 (位移之后的数据)
把二进制转换为整数
1111 1111 1111 1111 1111 1111 1001 1100
0000 0000 0000 0000 0000 0000 0110 0011
+ 1
----------------------------------------
0000 0000 0000 0000 0000 0000 0110 0100


“>>>”运算符所作的是无符号的位移处理,它不会将所处理的值的最高位视为正负符号,所以作位移处理时,会直接在空出的高位填入0。当我们要作

位移的原始值并非代表数值时(例如:表示颜色图素的值,最高位并非正负号),可能就会需要使用此种无符号的位移。

25>>>2 = 6

0000 0000 0000 0000 0000 0000 0001 1001
0000 0000 0000 0000 0000 0000 0000 0110


-25>>>2 = 1073741817

1111 1111 1111 1111 1111 1111 1110 0111
0011 1111 1111 1111 1111 1111 1111 1001
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值