Day47--有符号整数
Day47--有符号整数.md
有符号整数是什么?为什么10000000对应的是- 128?
- 有符号整数的概念
- 在计算机中,整数可以分为有符号整数和无符号整数。有符号整数用于表示正数、负数和零,而无符号整数只能表示零和正数。
- 对于有符号整数,最常见的表示方法是使用二进制补码(two's complement)。在这种表示方法中,最高位(最左边的位)被用作符号位。如果符号位是0,表示这个数是正数;如果符号位是1,表示这个数是负数。
byte类型与二进制补码byte类型在Java中是8位的有符号整数类型。它的取值范围是从 - 128到127。- 当我们用二进制补码来表示
byte类型的数时:- 正数的二进制补码就是其本身的二进制表示。例如,
127的二进制表示是01111111。 - 负数的二进制补码是通过对其绝对值的二进制表示取反再加1得到的。
- 正数的二进制补码就是其本身的二进制表示。例如,
- 对于
10000000这个二进制数:- 在8位有符号整数(
byte类型)的二进制补码表示中,10000000被解释为- 128。 - 我们可以这样理解:
- 根据二进制补码的规则,对于负数,要得到其对应的十进制值,先对除符号位外的其他位取反,然后加1,再加上负号。
- 对于
10000000,除符号位外的其他位都是0,取反后还是0,加1后得到10000000,对应的十进制值就是- 128。
- 在8位有符号整数(
当b = 127(二进制01111111),执行b+1得到10000000,在byte类型(有符号8位整数)中,10000000就表示- 128。
原码、补码、反码的关系
- 原码(True Form)
- 定义:原码是一种简单的机器数表示法,最高位为符号位,“0”表示正数,“1”表示负数,其余位表示数值的绝对值。例如,对于一个8位二进制数,+5的原码是00000101,-5的原码是10000101。
- 特点:原码表示简单直观,与真值(实际的数值)的转换关系容易理解,正数的原码就是其本身的二进制表示,负数的原码符号位为1,其余位为数值的绝对值的二进制表示。但是,在进行减法运算时,使用原码计算比较复杂,因为计算机需要判断符号位并进行不同的操作。
- 反码(One's Complement)
- 正数反码:正数的反码与原码相同。例如,+5的原码是00000101,其反码也是00000101。
- 负数反码:负数的反码是在原码的基础上,符号位不变,其余位按位取反。例如,-5的原码是10000101,其反码是11111010。
- 与原码的关系:反码是为了方便计算机进行减法运算而引入的一种中间表示形式。通过将减数(负数)转换为反码,就可以将减法运算转换为加法运算。
- 补码(Two's Complement)
- 正数补码:正数的补码与原码相同。例如,+5的原码是00000101,其补码也是00000101。
- 负数补码:负数的补码是在反码的基础上加1。例如,-5的原码是10000101,反码是11111010,补码是11111011。
- 与原码、反码的关系:补码是计算机中最常用的有符号数表示法。在补码表示法中,减法运算可以统一转换为加法运算,大大简化了计算机的运算电路。并且,补码可以表示的范围是不对称的,对于一个n位二进制补码数,其表示范围是(-2^{n - 1})到(2^{n - 1}-1)。例如,对于8位二进制补码数,其表示范围是 - 128到127。在这个表示范围内,所有的加法和减法运算都可以直接用补码进行,运算结果也是补码形式,计算机硬件可以很方便地实现这些运算。
总结来说,原码是最直观的有符号数表示法,反码是原码到补码的过渡形式,补码是计算机实际用于有符号数运算的表示法。正数的原码、反码、补码相同,负数的反码是原码除符号位外按位取反,补码是反码加1。
-
有符号整数相关题目
-
(1)已知一个有符号二进制整数
1000(最高位为符号位),判断它是正数还是负数,并转换为十进制。 -
负数
-
111
-
1000
-
1X2^3=8
-
答案:-8
-
(3)如果一个有符号二进制整数的补码为
1101,求出它的原码,并转换为十进制,判断其正负。 -
-3
-
(4)有一个 8 位有符号二进制数,其十六进制表示为
0F,先将其转换为二进制,再转换为十进制,判断这个数的正负。 -
15,正数
-

浙公网安备 33010602011771号