logo头像
Snippet 博客主题

【JavaSe必知必会】08-原码反码补码

前言

通过上一章节的内容我们已经掌握了不同进制间的转化,但是我们可以发现,我们做的都是一些正数的转化,那在计算机中,负数如何表示与运算呢?这就不得不提一下我们计算机的“码三少“:原码反码补码了。

有符号数据表示法

在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。

  • 原码
    就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
  • 反码
    正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
  • 补码
    正数的补码与其原码相同;负数的补码是在其反码的末位加1。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
有符号数据表示法
在技术算计内,有符号数据有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
微信打赏

赞赏是不耍流氓的鼓励