两个负数的补码相加计算机原码反码补码,加减乘除及常⽤位运算技巧
前⾔
程序中的所有数在计算机内存中都是以⼆进制的形式储存的,位运算就是直接对整数在内存中的⼆进制位进⾏操作, 所以位运算更能够⾼效率的完成数值的计算,也可以节约内存,程序在计算的时候所有的数值或者对象最终都要转化为⼆进制,计算机运算只有加法和位运算, 减法也是将数转成负数⼆进制的补码再相加取值, 乘法转换为加法运算,除法转换为减法运算(减法再转为加法运算)
⼀:原码,反码,补码与加减乘除运算
1:原码,反码与补码
正数的原码,反码,补码都⼀⾄.
负数原码为绝对值⼆进制最⾼位取1, 负数的反码是原码(符号位除外)按位取反, 负数补码是反码+1
如9的原码,反码,补码都是 00000000 00000000 00000000 00001001
-9 原码 10000000 00000000 00000000 00001001
-
9的反码 11111111 11111111 11111111 11110110
-9的补码 11111111 11111111 11111111 11110111
2:加法运算(与⼗进制类似例如6+9)
6的⼆进制 00000000 00000000 00000000 00000110
9的⼆进制 00000000 00000000 00000000 00001001
相加结果 00000000 00000000 00000000 00001111 转成⼗进制就是15
3:减法运算,减法其实就是将减的数转成负数取补码相加,例如6-9
正6的⼆进制 00000000 00000000 00000000 00000110
-9的⼆进制(补码) 11111111 11111111 11111111 11110111
相加结果 11111111 11111111 11111111 11111101 // 这个数就是-3的⼆进制
取反00 00000010 补码 00 00000011 就是-3的原码喽
4:乘法运算(通过左移化解成加法运算)
⼗进制中例如140 * 121 = 140 *(1 * 10^0 +2 * 10^1+1 * 10^2) = 140+2800+14000 = 16940,⼆进制也是⼀样,
算9 * 6, 6的⼆进制110, 即 9 * (0 * 2^0 + 1 * 2^1 + 1 * 2^2)位数为0的都等于0,分解出来就是 0 + (9 <<1) + (9<<2)
9的⼆进制1001 上⾯分解就等于 0+10010+100100 = 110110 ⼗进制就是54
5:除法(与⼗进制除法相似从⾼往低)
如73 / 5 , 73⼆进制1001001 , 5⼆进制101
从第⼀位 1 < 101 结果为0, 余1
到第⼆位1 0 <101结果为0,余10
到第三位 10 0 < 101 结果为0余100
到第四位 100 1 > 101 结果为1, 余为1001-101 = 100,
到第五位 100 0 > 101结果为1 余为1000 -101 = 11
到第六位11 0 > 101 结果为1 余为110 -101 = 1
到第七位 1 1 < 101 结果为0 余为 11
合起来结果就是 0001110 ,余为11 转⼗进制就是14余3
⼆:常⽤位运算技巧
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论