转载声明:商业转载请联系作者获得授权,非商业转载请注明出处.原文来自 © 呆萌钟 【JavaSe必知必会】08-原码反码补码
前言
通过上一章节的内容我们已经掌握了不同进制间的转化,但是我们可以发现,我们做的都是一些正数的转化,那在计算机中,负数如何表示与运算呢?这就不得不提一下我们计算机的“码三少“:原码反码补码了。
有符号数据表示法
在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。
- 原码 就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
- 反码 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
- 补码 正数的补码与其原码相同;负数的补码是在其反码的末位加1。
有符号数据表示法
在技术算计内,有符号数据有3种表示法:原码、反码、补码。
原码 就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码 正数的补码与其原码相同;负数的补码是在其反码的末位加1。
我准备用原码、反码、补码分别来表示+7,-7.
首先我们要得到7的二进制:111
原码:
正数的原码最高位是0.
负数的原码最高位为1.
其他的数值位.
符号位 数值位
+7 0 0000111
-7 1 0000111
反码:
正数的反码与其原码相同。
负数的反码与原码符号位相同,数值位要取反,就是0变1,1变0.
符号位 数值位
+7 0 0000111
-7 1 1111000
补码:
正数的补码与原码相同。
负数的补码是在反码的基础上加1.
符号位 数值位
+7 0 0000111
-7 1 1111001