二进制转化负数问题
发布网友
发布时间:2022-04-22 00:14
我来回答
共5个回答
热心网友
时间:2023-09-13 19:16
1.原码
正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值.用这样的表示方法得到的就是数的原码.
【例2.13】当机器字长为8位二进制数时:
X=+1011011 [X]原码=01011011
Y=+1011011 [Y]原码=11011011
[+1]原码=00000001 [-1]原码=10000001
[+127]原码=01111111 [-127]原码=11111111
原码表示的整数范围是:
-(2n-1-1)~+(2n-1-1),其中n为机器字长.
则:8位二进制原码表示的整数范围是-127~+127
16位二进制原码表示的整数范围是-32767~+32767
2.反码
对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反.
【例2.14】当机器字长为8位二进制数时:
X=+1011011 [X]原码=01011011 [X]反码=01011011
Y=-1011011 [Y]原码=11011011 [Y]反码=10100100
[+1]反码=00000001 [-1]反码=11111110
[+127]反码=01111111 [-127]反码=10000000
负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式.
反码表示的整数范围与原码相同.
3.补码
正数的补码与其原码相同,负数的补码为其反码在最低位加1.
【例2.15】(1)X=+1011011 (2) Y=-1011011
(1)根据定义有: [X]原码=01011011 [X]补码=01011011
(2) 根据定义有: [Y]原码=11011011 [Y]反码=10100100
[Y]补码=10100101
补码表示的整数范围是-2n-1~+(2n-1-1),其中n为机器字长.
则:8位二进制补码表示的整数范围是-128~+127
16位二进制补码表示的整数范围是-32768~+32767
当运算结果超出这个范围时,就不能正确表示数了,此时称为溢出.
4.补码与真值之间的转换
正数补码的真值等于补码的本身;负数补码转换为其真值时,将负数补码按位求反,末位加1,即可得到该负数补码对应的真值的绝对值.
【例2.16】[X]补码=01011001B,[X]补码=11011001B,分别求其真值X.
(1)[X]补码代表的数是正数,其真值:
X=+1011001B
=+(1×26+1×24+1×23+1×20)
=+(64+16+8+1)
=+(89)D
(2)[X]补码代表的数是负数,则真值:
X=-([1011001]求反+1)B
=-(0100110+1)B
=-(0100111)B
=-(1×25+1×22+1×21+1×20)
=-(32+4+2+1)
=-(39)D
热心网友
时间:2023-09-13 19:17
原码:在用二进制原码表示的数中,符号位为0表示正数,符号位为1表示负数,其余各位表示尾数本身,这种表示方法称为原码表示法.
补码:可以把负数转换为正数,使减法转换为加法,从而可使正、负数的加减动算转化为单纯的相加运算,而得到正确的结果。
反码:作为求补码的中间手段是非常有用的。
二进制负数存的是补码,第一位是符号位为1 表示是负数,算法是负数去掉符号的正数的二进制形式按位取反再加1得到的补码形式。
例如:4 是00000100
取反11111011
加一11111100
热心网友
时间:2023-09-13 19:17
原码、反码、补码都是有符号定点数的表示方法。
一个有符号定点数的最高位为符号位,0是正,1是副。
原码就是这个数本身的二进制形式。
原码:10001111
负数的反码是将其原码除符号位之外的各位求反
反码:11110000
负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。
原码:11110001
热心网友
时间:2023-09-13 19:18
负数,需要转换成为二进制补码。
求补码的公式:
补码 = 2^n + 负数, n 是补码的位数。
只有负数,才需要用补码替换。
正数,不用变换。
热心网友
时间:2023-09-13 19:19
原码10001111
位 76543210
10001111去掉符号位00001111=2的0次方+2的1次方+2的2方+2的3次方=1+2+4+8=15
就是负数-15