原码、反码、补码及位移运算

原码、反码、补码及位移运算

  • 原码、反码、补码


对于有符号数而言的性质

(1)正数的原码、反码、补码都一样

(2)负数的反码 = 符号位不变,其他位取反

(3)负数的补码 = 它的反码+1

(4)0的补码、反码都是0

(5)计算机运算的时候,都是按照补码来运算的

有符号数运算的案例

1.正数相加

例如1+1:

1的原码: 00000000 00000000 00000000 00000001

1的反码: 00000000 00000000 00000000 00000001

1的补码: 00000000 00000000 00000000 00000001

两数补码相加: 00000000 00000000 00000000 00000010 (此时结果为补码,正数补码原码相同,故不需要转化)

结果转化为十进制,即2

2.正数相减

例如1-2:

1的原码: 00000000 00000000 00000000 00000001

1的反码: 00000000 00000000 00000000 00000001

1的补码: 00000000 00000000 00000000 00000001

-2的原码: 10000000 00000000 00000000 00000010

-2的反码: 11111111 11111111 11111111 11111101

-2的补码: 11111111 11111111 11111111 11111110

两数补码相加:11111111 11111111 11111111 11111111

结果转化为反码:11111111 11111111 11111111 11111110

再转化为原码:10000000 00000000 00000000 00000001 转化为十进制,即-1

  • <<、 >>、 >>>位移运算


<< 左移运算符

请添加图片描述

左移一位,左侧第一位舍弃,右侧用0填补

一般来说,左移后数值等于原来的两倍,但也有例外情况(比如丢失符号位)

>> 右移运算符

100带符号右移

​ 100的原码、反码、补码均为: 00000000 00000000 00000000 01100100

​ 右移四位: 00000000 00000000 00000000 00000110

-100带符号右移

​ -100的原码: 10000000 00000000 00000000 01100100

​ -100的反码: 11111111 11111111 11111111 10011011

​ -100的补码: 11111111 11111111 11111111 10011100

​ 右移四位: 11111111 11111111 11111111 11111001 (左侧高位补1) —>此时还是补码,需要转换

​ 转化成反码: 11111111 11111111 11111111 11111000 (减1)

​ 转化为原码: 10000000 00000000 00000000 00000111

>>> 无符号右移运算符

100无符号右移(同>>)

​ 100的原码、反码、补码均为: 00000000 00000000 00000000 01100100

​ 右移四位: 00000000 00000000 00000000 00000110

-100无符号右移

​ -100的原码: 10000000 00000000 00000000 01100100

​ -100的反码: 11111111 11111111 11111111 10011011

​ -100的补码: 11111111 11111111 11111111 10011100

​ 无符号右移四位:在高位补0

的反码: 11111111 11111111 11111111 10011011

​ -100的补码: 11111111 11111111 11111111 10011100

​ 无符号右移四位:在高位补0

00001111 11111111 11111111 11111001 —>不需要转化,这就是最终结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值