算法:关于二进制取反,符号位取不取反的问题
我看到有时候讲解二进制的时候有这样一个规律:补码=反码+1但是算反码的时候我看有的时候是所有位取反,有的是符号位保持不变,其余位取反这两个哪个对呢?或者说适用情况不同?-...
我看到有时候讲解二进制的时候有这样一个规律:
补码=反码+1
但是算反码的时候我看有的时候是所有位取反,有的是符号位保持不变,其余位取反
这两个哪个对呢?或者说适用情况不同?
----------------------------------------------------
那计算二进制减法的时候,例如5-3,我们会将其变成加法运算5+(-3)
这个取反过程好像符号位也取反了,这是为什么呢?麻烦前辈们再帮小弟看下,我就是卡在这里了=。= 展开
补码=反码+1
但是算反码的时候我看有的时候是所有位取反,有的是符号位保持不变,其余位取反
这两个哪个对呢?或者说适用情况不同?
----------------------------------------------------
那计算二进制减法的时候,例如5-3,我们会将其变成加法运算5+(-3)
这个取反过程好像符号位也取反了,这是为什么呢?麻烦前辈们再帮小弟看下,我就是卡在这里了=。= 展开
展开全部
(1) 原码:在数值前直接加一符号位的表示法。
(2)反码:
正数:正数的反码与原码相同。
负数:负数的反码,符号位为“1”,数值部分按位取反。
(3)补码:
正数:正数的补码和原码相同。
负数:负数的补码则是符号位为“1”。数值部分按位取反后再在最低位加1。也就是“反码+1”。
----------------------------------------------------
5-3计算过程,以字长8bit为例
5 - 3 =
(0000 0101)补 + (1000 0011)补 =
0000 0101 + 1111 1101 (这里就是反码为1111 1100,+1得到) =
1 0000 0010
最后,这里字长为8bi,所以8位以后的都舍弃(从右边开始数)
PS:如果舍弃掉的是有效数字,那么这就是传说中的溢出
所以,结果为(0000 0010)2=(2)10
所以5-3=2
(2)反码:
正数:正数的反码与原码相同。
负数:负数的反码,符号位为“1”,数值部分按位取反。
(3)补码:
正数:正数的补码和原码相同。
负数:负数的补码则是符号位为“1”。数值部分按位取反后再在最低位加1。也就是“反码+1”。
----------------------------------------------------
5-3计算过程,以字长8bit为例
5 - 3 =
(0000 0101)补 + (1000 0011)补 =
0000 0101 + 1111 1101 (这里就是反码为1111 1100,+1得到) =
1 0000 0010
最后,这里字长为8bi,所以8位以后的都舍弃(从右边开始数)
PS:如果舍弃掉的是有效数字,那么这就是传说中的溢出
所以,结果为(0000 0010)2=(2)10
所以5-3=2
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询