负数的原码、反码、补码
负数的补码,取反,+1,得到原码a2
a1与a2为什么相等
感谢“做而论道”,你写的很好。其中,很好的一点是你引入了模的概念,而很多地方却以0来论述此问题。但是还有很多地方,你没理解。
其实,我也是到今天才把这概念弄懂。最高位是符号位是没有错的,但是不能理解成正号。包括很多的老师,其实都没有理解清楚,所以导致了这个混乱的局面。此处并不是忽悠,而是没理解。
你原文的论述很好,很容易给人以启发。但是论述太广,其实,原码、反码、补码就是针对二进制所定制的概念,而且如果每次算负数的补码都用模减去其绝对值的原码,那将很不方便。所以
①负数的补码,-1,取反,得到绝对值原码
②负数的补码,取反,+1,得到绝对值原码
这样还是比较方便的。(由于此处字数限制,我在我的百度空间里做了论证)
有空的,可以去看看
http://hi.baidu.com/知秋小枫/blog/item/8bfaf0e1bdca97d50b46e043.html 展开
补码,在数学领域,是有严格定义的。
在定义式中,根本就没有“求反加一”的说法。
-------------------
在计算机系统中,数值,一律采用补码表示和存储。
原码和反码,都是不存在的。
补码,是怎么定义的?
就按照八位来说吧,其模,就是 2^8 = 256。
数值 0,在计算机中,显然是用 0000 0000 存放的。
数值-1 怎么存放?
毫无疑问,就是 0-1,你会怀疑吗?
你用 0000 0000 减去一,即可得到 1111 1111 (十进制 255)。
即使产生了借位,也是八位之外的,不必考虑。
由此即可得到:[-1]补码=256-1 = 255。
数值-2 怎么存放?
显然就是-1 再减一,你还有怀疑吗?
即可得到:[-2]补码=256-2 = 254 = 1111 1110。
。。。
数值-128 怎么存放?
当然就是:[-128]补码=128 = 1000 0000。
-------------------
按照上述规律,你自己,都可以总结出补码的定义式:
[ X ]补码=模 - | X |, X < 0。
你多看几本书,一定能看到这个定义式。
当然,书上也写了“原码取反加一。。。”。
只是,-128 并没有原码和反码,你拿什么“取反加一”?
-------------------
补码的来源,就是这么简单。
补码,与原码反码,没有任何关系。
取反加一,并没有理论依据。
鼓吹“取反加一”的人,不是上当受骗的,就是诚心想要骗人。
2021-11-22 广告
再写[-x]原=符号位变为1,后续位不变
[-x]反=符号位为1,其余位=原码各位取反(0,1互换)
[-x]补=[-x]反+1
广告 您可能关注的内容 |