有符号位的二进制数,在计算原码和补码时那个符号位是始终不变的吗?

没有符号位的二进制数,补码(负数用补码表示)就是原码各位取反,末位+1。如用8位二进制数表示十进制数:12的原码为00001100-12的补码为:(00001100)取反... 没有符号位的二进制数,补码(负数用补码表示)就是原码各位取反,末位+1。
如 用8位二进制数表示十进制数 :
12的原码为 00001100
-12的补码为:( 00001100)取反得(11110011),末位+1,得(11110100)

有符号位的数据类型如 byte 型,占8为二进制数,最高位是符号位
如一个byte型变量的内存存储状态为10000000
怎样计算它的值? 逆推:补码10000000末位-1,得(01111111),各位取反得原码(10000000),转换为10进制数是128,因为是负数,所以是-128

逆推过程中符号位改变了。各位取反得到的原码(10000000)是没有符号位的,所以1不是符号位?

我的逻辑对吗?还有什么需要补充的?那个符号位的问题有点纠结
展开
 我来答
小Cherry丸子吖
2018-03-31 · TA获得超过2.7万个赞
知道小有建树答主
回答量:144
采纳率:43%
帮助的人:16.8万
展开全部
  1. 对于无符号数而言,没有什么原码、反码、补码的概念,只有绝对值

  2. 对于带符号数,才会有采用什么码型来表示的问题。10000000确实是-128的补码。对于带符号数,最高位是符号位,0表示正数、1表示负数,始终不变。所有的码型换算,都只针对低位的绝对值部分进行。

  3. 例如12的原码是00001100,-12的原码是10001100。对其绝对值部分0001100求反加1得1110100,最高位添上符号位1,就是补码11110100。

  4. 所以码型转换运算只针对绝对值部分,不针对符号位,符号位始终不变。

  5. 因为对于带符号数而言,真正的表示范围是-127~+127,这其中包含了两个0:+0(00000000)和-0(10000000)。而实际应用中,0是没有符号的,所以规定0用+0来表示,那么-0就是一个没有用的二进制码了,而对于低7位而言,模为128,那么128与0就是等值的,此时符号位是负的,于是规定-0就表示-128。这是人为规定。

做而论道
高能答主

2022-08-23 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部

在计算机系统中,数值,一律采用补码表示和存储。

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

求补码,也用不着它们。

所以,原码和反码,根本就没有用!

符号位,更是无稽之谈。

------------------------

补码,其实,就是一个“代替负数做运算”的正数。

且看 2 位 10 进制数的运算:

   25 - 1 = 24

   25 + 99 = (一百) 24

你舍弃进位,只取两位,这两种算法,功能就完全相同。

那么,+99,就代替了-1。加法,也就代替了减法。

这不就是“用正数(补数)代替了负数”吗?

求负数的补数,计算公式是: 补数 = 负数 + 10^n。

式中: n 是补数的位数。

   10^n 是 n 位 10 进制数的计数周期。

-------------------------

计算机用二进制,补数,就改称为:补码。

计算机所能计算的位数,是固定的,如八位机、16 位。。。

八位二进制是0000 0000~1111 1111 (十进制 255)。

八位二进制的计数周期,是:2^8 = 256。

求负数补码的计算公式,也是: 负数 + 周期。

-1 补码就是:-1 + 256 = 255 = 1111 1111(二进制)。

-2 补码就是:-2 + 256 = 254 = 1111 1110(二进制)。

。。。

-128 补码就是:128 = 1000 0000(二进制)。

正数,必须直接参加运算,不许转换。

所以,正数不存在补码。

求补码,根本就不用“原码反码符号位取反加一”这些烂事。

-------------------------

举例说明,用八位补码计算: 5 - 7 = -2。

       5  = 0000 0101

    -7 的补码= 1111 1001

--相加-------------

   得     (1)  1111 1110 = -2 的补码

舍弃进位,只保留八位,这就用加法,实现了 5-7。

--------------------------

在以上的讲解中,用到“符号位”了吗? 没有!

符号位,是在原码中定义的。反码也涉及到一点。

转到了补码,就不能再说什么符号位了。

而且,在计算机中,原码,也是根本就不存在的。

所以,符号位,只是他们臆想出来的,是虚无缥缈的。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沙里波特
2021-03-14 · TA获得超过5248个赞
知道大有可为答主
回答量:1.1万
采纳率:95%
帮助的人:630万
展开全部

根本就不用费那么多事。

正数的补码,就是该数本身。

负数的补码,就用其正数,减一取反,就成可了。

例如,已知:+9 的补码是:0000 1001。

求-9 补码步骤如下:

 先减一:0000 1001-1 = 0000 1000。

 再取反,即得:-9 补码 = 1111 0111。

这不就完了吗?

原码反码符号位,这些,都是垃圾。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nereus78e904
推荐于2017-11-26 · TA获得超过1.5万个赞
知道大有可为答主
回答量:5463
采纳率:90%
帮助的人:1944万
展开全部
对于无符号数而言,没有什么原码、反码、补码的概念,只有绝对值。
对于带符号数,才会有采用什么码型来表示的问题。10000000确实是-128的补码。对于带符号数,最高位是符号位,0表示正数、1表示负数,始终不变。所有的码型换算,都只针对低位的绝对值部分进行。
例如12的原码是00001100,-12的原码是10001100。对其绝对值部分0001100求反加1得1110100,最高位添上符号位1,就是补码11110100。
所以码型转换运算只针对绝对值部分,不针对符号位,符号位始终不变。
追问
那-128用补码表示,过程是怎样的?128的的原码是10000000,取其绝对值部分 0000000求反得
1111111,加1得0000000(是只取后7位吗?),再在首位添上1得10000000.
追答
是的。因为对于带符号数而言,真正的表示范围是-127~+127,这其中包含了两个0:+0(00000000)和-0(10000000)。而实际应用中,0是没有符号的,所以规定0用+0来表示,那么-0就是一个没有用的二进制码了,而对于低7位而言,模为128,那么128与0就是等值的,此时符号位是负的,于是规定-0就表示-128。这是人为规定。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式