源代码反码完成码的相互转换源代码反码完成码的转换还是一个比较简单和基础性的问题。 之前学习java的时候学过,但是忘了。 我忘了。后来学了位移运算符,左移右移无符号右移后,有点懵了。
原代码、逆向代码、补充代码
在二进制数中,第一位是符号位,0表示正数,1表示负数。
以8位二进制数为例。
原始代码
十进制加1的二进制码[ 1]元=0000 0001
十进制负1的二进制码[-1]为元=1000 0001
第一位是符号位。 因为第一位是符号位,所以8位二进制数的可取范围为:
[ 1111111,01111111 ]即[-127,127 ]十进制范围。
反码
反码的显示方法是:
1 .正数反码本身
2 .负数反码,其中,基于该原始编码,符号的比特不变,而剩馀比特取反。
[ 1]=[0000 0001]原=[0000 0001]反
[-1]=[1000 0001]原=[1111 1110]反
补充代码
补数的表示方法为:
正数的补数就是本身
负数的补数,基于原来的符号,符号的位数不变,剩下的各位取反,最后1.(即根据反码为1 ) )。
[ 1]=[0000 0001]原=[0000 0001]反=[0000 0001]补
[-1]=[1000 0001]原=[1111 1110]反=[1111 1111]补
总结
知道一个数量的源代码的情况:
正数:反码,补数是自己
负数:反码是高位符号的位不变,剩下的位取反。 补充代码:反转代码1练习
-A的二进制原始代码多次按位取反或者位取反,再加1得到-A的补码。
-A从补数转换为原始代码。 以位为单位重复1 或减法,以位为单位第注意位的符号的位不变。
符号是第一位,1是负数,0是正数。 不表示数值的大小
示例:
4补数是0100 -4补数是1100
-4得原代码为1000 0100反码(原代码的符号位不变,逐位取反)为1111 1011补数)反码加一)为1111 1100
在8位二进制文件中,(假设为8位) 4补数是0000 0100 -4补数是1111 1100
-4源代码转换为-4的补全过程补全代码转换
方法一: 1000 0100减去1,每1000 0011位倒取1111 1100
方法二:1000 0100位单位的获取是11111011 11111100
-4的补数转换为原始代码,逐位相反,但符号位不变
方法一:1111 1100位获取10000011 00000100负获取-4
方法二:1111 1100减去1,在1111 1011位中将1000 0100取反,取负为-4
如果你记不住,请记住。 补数=原代码按位数取反1,减去原代码=补数多次按位数取反1。
要点:1.正数时,原代码的反码完成代码都是相同的。 上述规则是相对于负数的。
2 .正数和负数的源代码只与符号位的值不同。 不同的正数是0,负数是1。