反码和补码的范围是多少(反码和补码的范围)
0
2023-10-21
你好,我叫小霞,我将为你回答以上问题。反码和补码怎 math,很多人不知道反码,现在来看看吧!
本文到此结束,希望对家长有所帮助。
所谓原码是二进制定点表示,即最高位是符号位,“0”表示正,“1”表示负,其余位表示值的大小。反码表示规定正数的反码与其原码相同;负数的求反是对其原始代码的逐位求反,符号位除外。补码的表示规定正数的补码与其原码相同;负数的补数是在其补数的最后一位加1。
1.原码、补码、补码的表示方法。
定点整数表示
(1)原码:直接在数值前加一个符号位的表示。
例如:符号位值位
[+7]原始= 0 0000111 B
[-7]原始= 1 0000111 B
注:a .数字0的原始代码有两种形式:
定点十进制表示法
[+0]原始= 0000000b [-0]原始=10000000B。
B.8位二进制源代码的表示范围:-127 ~+127。
(2)反代码:
正数:正数的逆码与原码相同。
负数:负数的反码,符号位为“1”,数值部分逐位反转。
浮点表示法
例如:符号位值位
[+7] anti = 0 0000111 B
[-7] anti = 1 1111000 B
注:答:数字0的反码也有两种形式,即
[+0] anti =00000000B
[- 0] anti = =11111111B
B.8位二进制补码的表示范围:-127 ~+127。
(3)补语的表示方法
1)模量的概念:计量单位称为模量或模数。例如,时钟以12为基数计数,即以12为模。在时钟上,通过增加(正向拨号)12的整数位或减去(反向拨号)12的整数位,时针的位置保持不变。14点变成(下午)2点(14=14-12=2)拆模后。从0点逆时针拨10格减10小时,或从0点顺时针拨2格(加2小时),即2点(0-10=-10=-10+12=2)。所以在模12的前提下,-10可以映射到+2。这样,对于模数为12的循环系统,加2减10的效果是一样的;因此,在12的模制中,减10的所有运算都可以用加2来代替,这就把减法问题变成了加法问题(注:计算机的硬件结构中只有加法器,所以大部分运算最后都要转换成加法)。10和2对于模块12来说是互补的。
同理,计算机的运算部件和寄存器都有一定的字长限制(假设字长为8),所以它的运算也是模运算。当计数器满8位即256时,就会溢出,从头开始计数。溢出量是计数器的模数。显然,一个8位二进制数的模数是8=256。在计算中,两个互补的数叫做“补数”。
2)补语的表示:
正数:正数的补码与原码相同。
负数:负数的补码是符号位为“1”,数值逐位反转,然后在最后一位(最低位)加1。那就是“反码+1”。
例如:符号位值位
[+7]补码= 0 0000111 B
[-7]补码= 1 1111001 B
补码是微机中一种重要的编码形式,请注意:
A.采用补码后,减法运算可以很容易地转化为加法运算,运算过程得到简化。正数的补数是它所代表的数的真值,负数的补数的数值部分不是它所代表的数的真值。采用补码运算,结果还是补码。
B.与原码和补码不同的是,补码的值只有一个0,即[0]补码=00000000B。
C.如果字长是8位,补码表示的范围是-128 ~+127;在进行补码运算时,要注意结果不能超出补码所能表示的数的范围。
因为正数的原码、补码、补码都是一样的,不需要转换。
这里只分析反面案例。
例:给定某数X的原码为10110100B,试求X的补码和补码。
解:从[X] original =10110100B,X为负。求其补数时,符号位不变,数值部分逐位求反;求其补码时,将其补码的最后一位加1。
1 0 1 1 0 1 0 0原始代码
1 1 0 0 1 0 1 1反码,符号位不变,数值位反转。
1 +1
1 1 0 0 1 1 0 0的补码
所以:[X]补码=11001100B,[X]反码=11001011B。
解析:按照求负补码的逆过程,数值部分应该是最低位减1,然后求逆。但是对于二进制数,先减1再取反和先加1得到的结果是一样的,所以还是有取反加1的方法。
例:给定某数X的补码,试求其原码。
解:从[X]补码=11101110B,X为负。
采用逆向演绎法
1 1 1 0 1 1 1 0的补码
1 0 0 1 0 0 0 1反码(符号位不变,数值位反转)
1 0 0 1 0 0 1 0原始代码(减1)
1.3.2有符号数运算中的溢出问题
请家长做两个题目:
两个正数怎么加起来是负数???
1)(+72)+(+98)=?
0 1 0 0 1 0 0 0 B +72
+ 0 1 1 0 0 0 1 0 B +98
1 0 1 0 1 0 1 0 B -86
两个负数如何相加得到一个正数???
2)(-83)+(-80)=?
1 0 1 0 1 0 1 0 1 B-83
+ 1 0 1 1 0 0 0 0 B -80
0 1 0 1 1 1 0 1 B +93
思考:这两道题是按照正常规律计算的,但结果明显不正确。出什么事了?
回答:这是因为溢出。
如果计算机的字长为n位,n位二进制数的最高位为符号位,其余n-1位为数值位,则使用补码表示法时,可表示数X的范围为-2n-1≤X≤2n-1-1。
当n=8时,可表示的有符号数的范围是-128 ~+127。当两个有符号数相加时,如果结果超出了可表示的有符号数的范围,就会溢出,使计算结果出错。显然,溢出只能发生在两个符号相同的数相加或者两个符号不同的数相减的时候。
对于加法运算,如果第二高位(数值部分的最高位)形成进位并将其加到最高位,但最高位(符号位)将其加(包括第二高位的进位)而不进位,或者相反,当第二高位不将其进位到最高位,但最高位有进位时,就会发生溢出。因为这两种情况是:两个正数相加,结果超出范围,形式上变成负数;两个负数加在一起,结果超出范围,在形式上变成正数。
对于减法运算,当次高位不需要向最高位借位,但最高位需要借位时(正数减轻负担,差值超出范围),或者反过来,次高位需要向最高位借位,但最高位不需要借位(负数减去正数,差值超出范围),也会发生溢出。
在计算机中,数据是以补码的形式存储的,所以补码在C语言的教学中占有重要的地位,而解释补码必然涉及原码和补码。这部分演示了一个整数的原码、补码和补码。过程和结果都显示在列表框里,结果很少,不需要自动清除,但是过程是一样的,不需要清除。所以需要设置按钮来清除所有部分和全部清除。测试时注意最大和最小正负数。用户在使用时,要注意不会溢出的说明:当一个数的反码的所有位都是1时,就会溢出,那么它的原码就是10000...它不是负数,所以不会溢出。
在n位的机器数中,最高位是符号位,表示零为正,一为负;剩下的n-1位是数值位,每一位的值可以是0也可以是1。当真值为正时,原码、补码、补码的位数完全相同;当真值为负时,原码的数值位保持不变,反码的数值位是原码数值位的反转,补码是反码的最低位加1。请注意,符号位保持不变。
不要提示太少,而是“某数的逆码是某某”,而不是只显示数值。
1.原码的解法:(1)对于正数,转换成二进制数,在前面加一个符号位(这是规定的),用1代表负数,用2代表正数。例如,0000 0000是一个字节,其中0是一个符号位,代表一个正数,其余七位代表一个二进制值。实际上,机器并不关心这些是什么符号位或值。
(2)对于负数,转换成二进制数,前面的符号位为1。这意味着它是一个负数。
要计算原码,只需在转换后的二进制数前面加上相应的符号位即可。
2.反码的解决方法:对于负数,原码位反转,符号位不变。
3.补码的解法:对于负数,只需在补码上加1,即补码的最后一位加1就是补码。