在机器码中,通常在最左边添加一个不参与运算的符号位,用0表示正号“+”,1表示负号“-”
“◇”表示小数点位置,不占位
小数二进制的转换是小数部分每次乘以2然后取结果的整数部分,如0.5*1 = 1.0,就取1,后面没有了就不用再计算,但这里因为机器字长n为8,所以再补上6个0
设机器字长n为8,首位为符号位,不参与运算
各类机器码参考如下举例
原码
[+1]原=00000001[+1]_原 = 00000001[+1]原=00000001
[−1]原=10000001[-1]_原 = 10000001[−1]原=10000001
[+127]原=01111111[+127]_原 = 01111111[+127]原=01111111
[−127]原=11111111[-127]_原 = 11111111[−127]原=11111111
[+45]原=00101101[+45]_原 = 00101101[+45]原=00101101
[−45]原=10101101[-45]_原 = 10101101[−45]原=10101101
[+0.5]原=0◇1000000[+0.5]_原 = 0◇1000000[+0.5]原=0◇1000000
[−0.5]原=1◇1000000[-0.5]_原 = 1◇1000000[−0.5]原=1◇1000000
反码
正数的反码与原码相同
负数的反码是除了符号位,其余位按位取反(简单来说就是除了左边第一位,其余位的1变成0,0变成1)
[+1]反=00000001[+1]_反 = 00000001[+1]反=00000001
[−1]反=11111110[-1]_反 = 11111110[−1]反=11111110
[+127]反=01111111[+127]_反 = 01111111[+127]反=01111111
[−127]反=10000000[-127]_反 = 10000000[−127]反=10000000
[+45]反=00101101[+45]_反 = 00101101[+45]反=00101101
[−45]反=11010010[-45]_反 = 11010010[−45]反=11010010
[+0.5]反=0◇1000000[+0.5]_反 = 0◇1000000[+0.5]反=0◇1000000
[−0.5]反=1◇0111111[-0.5]_反 = 1◇0111111[−0.5]反=1◇0111111
补码
(注:考虑到计算的方便性,计算机系统中,数值一律用补码表示)
正数的补码与其原码和反码相同
负数的补码等于其反码末尾加1(1+1=0并且向前进一位,也就是前面的一位也要+1;1+0=1;0+0=0)
[+1]补=00000001[+1]_补 = 00000001[+1]补=00000001
[−1]补=11111111[-1]_补 = 11111111[−1]补=11111111
[+127]补=01111111[+127]_补 = 01111111[+127]补=01111111
[−127]补=10000001[-127]_补 = 10000001[−127]补=10000001
[+45]补=00101101[+45]_补 = 00101101[+45]补=00101101
[−45]补=11010011[-45]_补 = 11010011[−45]补=11010011
[+0.5]补=0◇1000000[+0.5]_补 = 0◇1000000[+0.5]补=0◇1000000
[−0.5]补=1◇1000000[-0.5]_补 = 1◇1000000[−0.5]补=1◇1000000
总结:在计算机器码时,首先判断符号是正还是负,然后写出其原码,正数的反码、补码和原码都是一样的,所以只需要记住负数的反码和补码计算方式即可
记忆:先反再补,负数反码按位取反、负数补码为反码末尾+1(符号位始终不变)
如有错误,欢迎评论留言指正
本文深入解析机器码中正负数的原码、反码及补码表示方法,详细阐述了不同机器码之间的转换规则,以及如何通过补码进行计算,为理解计算机内部数值表示提供了清晰的指导。
1809





