2进制数运算的时候符号位需要变化吗?

2进制数运算的时候符号位需要变化吗?
比如机器字长为8位:
一个2进制数11111111,表示的是-127,11111111+1等于什么呢?是10000000还是00000000还是别的什么结果?
还有10000000的补码又是什么?
谢谢楼下的回答,但是根据你的回答和原--反--补的转化规则。原码为10000000的反码是11111111,补码是11111111+1=?=0
那个问号应该是=什么啊?是00000000还是10000000还是00000000

在计算机中是这样规定的,用一个数的最高一位表示正负,0为正,1为负.如0111,1111转换为十进制为127,1111,1111为-127,由此我们知一字节的范围为-127--127,其他字节的范围类推.
上面讲的都是原码表示法,可在计算机中的数据都是以补码存放的,只有这样计算时才能减轻cpu的负担(为什么,请参考“计算机基础教程”).提到补码,就不得不提反码了.计算机中是这样规定反码的,如果是正数,则按原码形式不变,如127仍为0111,1111;而如果为负数则,第一位为1,其他各位取反(即0变为1,1变为0),如原码-127(1111,1111),表示为1000,0000.
补码同上,如果是正数,则按原码形式不变,如127仍为0111,1111;如果为负数则除第一位为1外,其他各位取反加1,如-127,先取反为1000,0000,然后加1,为1000,0001.但1000,0000比较特殊,用它来表示-128,由此我们知补码可表示的范围是-128--127.
下面举几个例子:
1)原码
X=45 [X]原=0010 1101
X=-45 [X]原=1010 1101

2)反码
·正数的原码与反码相同( 正数的反码与原码相同,符号位用0表示,数值位值不变 )
X=45 [X]原=0010 1101 [X]反=0010 1101

·负数的反码符号位用1表示, 数值位为原码数值位按位取反形成,即0变1、1变0。
X=-45 [X]原=1010 1101 [X]反=1101 0010

3)补码
·正数的补码与原码相同,即符号位用0表示,数值位值不变。
X=45 [X]原=0010 1101 [X]反=0010 1101 [X]补=0010 1101

·负数的补码为反码加1
X=-45 [X]原=1010 1101 [X]反=1101 0010 [X]补=1101 0011

注
[-127]10=[1111 1111]原=[1000 0000]反=[1000 0001]补
[1000 0001]补+1=[1000 0010]补=[11111110]原=[-126]10
可以看出结果是正确的。

有了计算机补码后,运算时可以将符号位一道参与运算
温馨提示:内容为网友见解,仅供参考
第1个回答  2006-10-07
补充:原码、反码中0都有两个,而补码中却只有一个,原因就是它把其中一个转为最小的-128(10000000),而原码中的10000000表示的是00000000,不能按常规来解释原码的10000000的补码,如果按常规来讲,就是10000000(-0变成了-128)。

来看下关于1000000的运算(默认为补码)
10000000 + 00000001 = 10000001 = 11111111(原)
(-128 + 1 = -127)
01111111 + 00000001 = 10000000
(127 + 1 = -128)(溢出)(这里没有转成原码,因为转后就是-0)

楼主说11111111表示-127,看来用的是原码。那么原码中相反符号数之间的加法做的是减法,所以结果是11111110(-126),计算机内是以补码形式存在的,所以11111111表示-1,加1的结果就是00000000。
而对于10000000,楼主的意思好像是原码,也就是原码中的0,它的补码也同样是0。求补得到的结果也是一样的。
第2个回答  2020-06-07
+13+(-10)是溢出
要运算的结果大于数值设备所能表示数的范围,就会产生溢出.
如何判断补码溢出:
可以通过最高位与次高位进位来判断:若最高数值位向符号位的进位值与符号位产生的进位输出值不相同,则表明加减运算产生了溢出.
溢出现象应当作一种故障来处理,因为它使结果数发生错误.异号两数相加时,实际是两数的绝对值相减,不可能产生溢出,但有可能出现正常进位;同号两数相加时,实际上是两数的绝对值相加,既可能产生溢出,也可能出现正常进位.由于补码运算存在符号位进位自然丢失而运算结果正确的问题,因此,应区分补码的溢出与正常进位.
只有有符号数存在溢出,无符号数不存在溢出~
第3个回答  2022-03-06

你说的:一个2进制数11111111,表示的是-127,...

这应该是-127 的原码,并不是数。

原码,就不需要讨论了。

你求出补码,再说计算的问题。

因为,计算机中的计算,都是用补码进行的。

原码和反码,在计算机中,都不存在。

2进制数运算的时候符号位需要变化吗?
比如机器字长为8位:一个2进制数***,表示的是-127,***+1等于什么呢?是***还是***还是别的什么结果?还有***的补码又是什么?解析:在计算机中是这样规定的,用一个数的最高一位表示正负,0为正,1为负.如0111,1111转换为十进制为127,1111,1111为-127,由此我们知一字节的范围为-127--...

二进制运算时,符号位为什么总是1呢?
二进制运算当然是在二进制数字间的运算。正数的补码等于原码,负数的补码就是取反加一(符号位不动)。举个“栗子”:求-7的补码。因为给定数是负数,则符号位为“1”。后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001 加在末尾了),所以-7的补码是11111001。

有符号位的二进制数,在计算原码和补码时那个符号位是始终不变的吗?
所以码型转换运算只针对绝对值部分,不针对符号位,符号位始终不变。因为对于带符号数而言,真正的表示范围是-127~+127,这其中包含了两个0:+0(00000000)和-0(10000000)。而实际应用中,0是没有符号的,所以规定0用+0来表示,那么-0就是一个没有用的二进制码了,而对于低7位而言,模为128...

有符号位的二进制数,在计算原码和补码时那个符号位是始终不变的吗?
-2 补码就是:256 + (-2) = 254 = 1111 1110(二进制)。。。-128 补码就是:128 = 1000 0000(二进制)。正数,必须直接参加运算,不许转换。所以,正数不存在补码。求补码,根本就不用“原码反码符号位取反加一”。--- 举例说明,用八位补码计算: 5 - 7 = -2。5 = 0000 010...

二进制表示&&位运算
正数的反码是其本身; 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。正数的补码就是其本身; 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)。参加运算的两个数,换算为二进制(0、1)后,进行与运算。只有当相应位上的数...

计算机2进制计算的补码和反码符号位的问题
正数的反码补码都是本身 负数8位前第一个不变,其他七位取反;而补码是反码 +1 按这个规则计算 还有运算符的优先级问题

二进制的逻辑运算带符号位吗
当我们谈论 位运算 时,是对 机内数 运算。负数,在机器内用的是补码,不是原码,位运算 对 整个字节(1字节,2字节,4字节..) 运算,不管符号位不符号位。例如 按位与,按位或,按位非,按位异或。如果想对负数原码运算,可以把原码表示成一个无符号数,再处理。正数没问题,正数的原码,补码...

什么是二进制数的原码、反码、补码?
原码转换为反码:符号位不变,数值位按位取反;原码转换为补码:符号位不变,数值位按位取反,末尾在+1;例2:-66 66的二进制:1000010,所以-66的原码:1 1000010  补码:1 0111101 反码:1 0111110 二、二进制原码、反码、补码的加减运算及标志位 1.补码加减基本公式 加法:整数 [...

为什么两个二进制的补码相加时,和的符号位等于两数的
最高位是符号位,0表示正数、1表示负数,始终不变。所有的码型换算,都只针对低位的绝对值部分进行。例如12的原码是00001100,-12的原码是10001100。对其绝对值部分0001100求反加1得1110100,最高位添上符号位1,就是补码11110100。所以码型转换运算只针对绝对值部分,不针对符号位,符号位始终不变。

二进制:取反究竟变符号位吗?为什么我看有的变有的不变呢?
都不变,正数反码是它本身,负数反码是符号位不变,其他位1变0,0变1

相似回答