首先,我们要了解原码、反码以及补码。
原码可以看做是一个二进制数,第一位表示符号,用“0”表示“+”,用“1”表示“-”,其余位表示数值。
反码可以看做是原码与补码之间的过渡码。正数的反码是其本身原码,负数的反码是在其原码的基础上,符号位不变,其余各位取反。
对于补码而言,正数的补码也是其本身原码,亦是其本身反码;负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后再+1,也可以认为是在其反码的基础上,再+1。
总的来说,如果一个数是正数,则符号位为0,且它的原码、反码、补码相同;如果一个数是负数,则符号位为1,反码是其余各位取反,补码是反码+1。
根据上述描述,我们可以分别计算一下+0和-0的原码、反码、补码。(0带符号没有任何意义)(以4位二进制数为例)
真值 | 原码 | 反码 | 补码 |
+0 | 0000 | 0000 | 0000 |
-0 | 1000 | 1111 | 0000 |
注意:1111+1=10000,取4位为0000。
本文固定URL:https://www.dotcpp.com/qa/43
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程