彻底弄清补码加减法运算,正数、负数位移运算原理前⾔所有的运算都是补码运算。
正数的补码是其本⾝
负数补码的计算⽅式:
由原码到补码:原码除符号位以外全部取反得到反码,再加1得到补码。(取反区别于~按位取反运算符,按位取反运算符是包括符号位在内全部取反)
由补码到原码:亦为除符号位以外取反加1,需注意,若补码为正,此时原码和其本⾝相等,⽆需取反加1,若不理解,请阅读下⽂加法例⼦。
例如(为⽅便清晰本⽂以 8bit 类型为例):-3 的原码:1000 0011-3 的反码:1111 1100-3 的补码:1111 1101
两个不同情况的加法例⼦:
负数二进制补码运算法则例1:-3 + 2
2 的补码为其本⾝: 0000 0010
-
3 的补码为: 1111 1101
两者相加所得补码 :1111 1111
此时补码为负,除符号位取反加1得到原码:1000 0001,即 -1
例2: -3 + 5
5 的补码: 0000 0101
-3 的补码: 1111 1101
相加所得补码:1 0000 0010
左边 1 溢出范围,舍去:0000 0010
此时补码为正,原码和补码相等,原码亦为:0000 0010,即 2
减法
为了⽅便与效率,计算机统⼀做加法,不会做减法,减去⼀个数即为加上这个数的负数。
例如:5 - 6,会被处理为 5 + (-6),按照以上加法规则运算。
正数位移运算正数位移较为简单,满⾜以下规则:⾼位补 0
低位补 0
例如
5 >> 1:0000 0101 -> 0000 0010 (2)
5 << 1:0000 0101 -> 0000 1010 (10)
(加粗的 0 是补上的,下⾯的例⼦也⼀样)
整体表现为:
右移 x 位代表除以 2,向下取整
左移 x 位代表乘以 2。
负数位移运算
x x
负数位移稍为特殊,满⾜以下规则:⾼位补 1低位补 0
符号位不动
右移例⼦:
-15 >> 2:
-15 的原码:1 000 1111
补码: 1 111 0001
右移⼀次: 1 111 1000(此时为 -8 的补码)右移第⼆次:1 111 1100
求得原码: 1 000 0100,即为 -4
左移例⼦:
-15 << 1:
-
15 补码: 1 111 0001
左移: 1 110 0010
求得原码:1 001 1110,即为 -30
整体表现为:
右移 x 位代表除以 2,向下取整
左移 x 位代表乘以 2。x x
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论