关于负数在计算机使用补码显示的一些思考

这里总结关于为什么负数运算使用补码的一些思考。

问题一:补码是什么?

补码是为了方便计算机对负数进行运算而发明出来的,对于正数没有意义。补码其实就是使用进行运算的数字的模(比如:一个8位二进制的模是1 0000 0000即2^8)减去当前负数的绝对值得到的结果。因为一个负数的绝对值加上他的反码是当前位数所能表示的最大值,也就是摸减去一,所以,一个负数的补码公式为:补码=反码+1。

问题二:为什么负数需要换成补码运算?

一个8位的二进制,最高位0代表正数,1代表负数,那么:

1 + 2 = 3
0000 0001 + 0000 0010 = 0000 0011  //3两个正数相加结果正确
-1 + 2 = 1
1000 0001 + 0000 0010 = 1000 0011 //-3一个负数+正数结果错误
-1 + (-2) = -3
1000 0001 + 1000 0010 = 0000 0011 //3两个负数相加结果错误

由于负数的原码直接参与运算得出的结果都是错误的,所以,现在有两个解决办法:

1.在加法器的基础上再实现一个减法器
2.在不增加减法器的基础上通过其他方法实现负数的运算

总的来说,大佬们采取了后面一种办法来曲线救国,这个就是补码。

1 + 2 = 3
0000 0001 + 0000 0010 = 0000 0011  //3两个正数相加结果正确
-1 + 2 = 1
1111 1111 + 0000 0010 = 0000 0001 //原码1一个负数+正数结果正确
-1 + (-2) = -3
1111 1111 + 1111 1110 = 1111 1101 //将该补码取反加一转换成原码为-3两个负数相加结果正确

那么为什么将负数变成补码就可以正确运算呢?这就要用到模的概念了。
举个比较好理解的例子,时钟。一个时钟有12个大的刻度,假如现在是6点,那么把指针拨到3点有两种办法,一种是逆时针拨动3格,也就是6-3=3,或者顺时针波动9格,即6+9=3(15-12=3),这两种方法是等价的。很明显,时钟的模为12,那么从当前刻度转一圈12刻度其实回到了原点,所以,15点其实就是3点,即6-3=6+(12-3)-12=6+9-12,因为12超出显示范围所以被丢弃,即减去一个数等于加上一个数的补数,同理二进制的负数运算也可以转换成加法。

问题三:计算结果正负以及溢出

先看结果:


Screen Shot 2023-03-09 at 11.56.27.png
1.关于相加结果正负

两个正数相加为正数和两个负数相加为负数,这两个应该没有异议。主要是正数+负数,从操作来看,正负符号相加为1,那么如果最高位进位1和符号位1相加,则为0,结果是正的;如果最高位没有进位,则符号位为1,结果是负的。从原理来讲,正数+负数=正数+补码,有进位说明正数+补码>=模, 因为|负数|+补码=模,那么正数>=|负数|,所以结果为正;同理没有进位说明正数+补码<模,那么正数<|负数|,所以结果为负。

2.关于相加结果溢出

两正数相加,最高位有进位就是超模了,所以,溢出。一正一负相加是不会溢出的,因为结果最大和最小值的绝对值也比模小一。两负数相加,最高位没有进位,说明两负数的补码相加没有超模,那么两负数的原码相加就肯定超模了,因为负数和其补码相加结果等于模,那么两负数加两补码就等于两个模,那么,两负数补码相加没有超模,两负数相加肯定超模,所以,两负数相加,最高位没有进位,结果就溢出了。

问题四:一个8位有符号整型最小值是-128

按照规则一个8位有符号整型的表示范围为:-127~127,但是这里有个问题就是0的唯一性问题,这里1000 0000和0000 0000都表示0,那么运算的时候用哪个表示0比较好,这个计算机无法判断,所以,干脆就把1000 0000表示-128,不仅可以表示多一位数,还可以解决0的唯一性问题,很合理。

以上就是我遇到关于负数补码的一些问题的思考,仅供参考。

参考:为什么计算机中的负数要用补码表示?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 223,924评论 6 521
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,776评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 170,954评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,576评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,589评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,105评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,480评论 3 427
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,457评论 0 278
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,998评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,026评论 3 343
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,174评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,812评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,502评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,979评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,101评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,674评论 3 380
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,204评论 2 363

推荐阅读更多精彩内容