计算机基础之,源码、反码、补码、&、|、^、左移位、右移位、无符右移运算

【原码、反码、补码】
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值
正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
例如:
11 
00000000 00000000 00000000 00001011(源码)
00000000 00000000 00000000 00001011(反码)
00000000 00000000 00000000 00001011(补码)
-11
10000000 00000000 00000000 00001011(源码)
11111111 11111111 11111111 11110100(反码)
11111111 11111111 11111111 11110101(补码)

【正数直接取二进制运算,负数取反加一得补码再运算】
【按位与&】符号位参与运算
两个相应的二进制形式的对应的位数都为1,则结果为1,记为同1为1,否则为0
4&5=4
00000000 00000000 00000000 00000100
00000000 00000000 00000000 00000101
-----------------------------------&
00000000 00000000 00000000 00000100

-4&5=4
11111111 11111111 11111111 11111100(补码)
00000000 00000000 00000000 00000101
-----------------------------------&
00000000 00000000 00000000 00000100

【按位或 |】符号位参与运算
有1为1,否则为0
4|5=5
00000000 00000000 00000000 00000100
00000000 00000000 00000000 00000101
-----------------------------------|
00000000 00000000 00000000 00000101

-4|5=-3
11111111 11111111 11111111 11111100(补码)
00000000 00000000 00000000 00000101
-----------------------------------|
11111111 11111111 11111111 11111101(补码)补码-1取反=源码
11111111 11111111 11111111 11111100(反码)
10000000 00000000 00000000 00000011(源码)= -3

【异或 ^】符号位参与运算
相同为0,不同为1
4^5=1
00000000 00000000 00000000 00000100
00000000 00000000 00000000 00000101
-----------------------------------^
00000000 00000000 00000000 00000001

-4^5=4
11111111 11111111 11111111 11111100(补码)
00000000 00000000 00000000 00000101
-----------------------------------^
11111111 11111111 11111111 11111001(补码)
11111111 11111111 11111111 11111000(fan码)
10000000 00000000 00000000 00000111(原码)= -7


【移位运算】
【左移 << (补码计算)】右边空出的位用0填补高位左移溢出则舍弃该高位
4<<2 = 16
00000000 00000000 00000000 00010000(正数原反补一样)= 16
-4<<2= -16
10000000 00000000 00000000 00000100(源码)
11111111 11111111 11111111 11111011(反码)
11111111 11111111 11111111 11111100(补码)= 反码+1
11111111 11111111 11111111 11110000(补码)<<2
11111111 11111111 11111111 11101111(反码)= 补码-1
10000000 00000000 00000000 00010000(源码)= -16
【右移 >> (补码计算)】左边空出的位用0或者1填补。正数用0填补,负数用1填补。注:不同的环境填补方式可能不同;低位右移溢出则舍弃该位
4>>2  = 1
00000000 00000000 00000000 00000001(正数原反补一样)= 1
-4>>2 = -1
10000000 00000000 00000000 00000100(源码)
11111111 11111111 11111111 11111011(反码)
11111111 11111111 11111111 11111100(补码)= 反码+1
11111111 11111111 11111111 11111111(补码)>>2
11111111 11111111 11111111 11111110(反码)= 补码-1
10000000 00000000 00000000 00000001(源码)= -1
【无符右移>>>】
正数与右移规则一样,负数的无符号右移,就是相应的补码移位所得,在高位补0即可
4>>>2 = 1
00000000 00000000 00000000 00000001(正数原反补一样)= 1
-4>>>2 = 1073741823
10000000 00000000 00000000 00000100(源码)
11111111 11111111 11111111 11111011(反码)
11111111 11111111 11111111 11111100(补码)= 反码+1
00111111 11111111 11111111 11111111(补码)>>>2 = 1073741823 (不取反,直接输出)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值