Skip to content

Latest commit

 

History

History
68 lines (43 loc) · 1.31 KB

java (byte)255 浅谈溢出.md

File metadata and controls

68 lines (43 loc) · 1.31 KB

java (byte)255 == -1 浅谈溢出

bytejava 八大基本类型之一,有符号 8 位存储, 它的存储范围是:

// 最小值 -2^7 (-128)
// 补码:1000 0000


// 最大值 2^7 - 1 (127)
// 补码:0111 1111

不是说占 8 位嘛,为什么不是 -2^8 至 2^8-1 呢?

因为最高位还要留给符号位。

大家猜一下 (byte)128 是多少呢?

是 -128。这里有一个重要的概念,就是 (byte)128 表达式中的 128 是 32 位 int 类型。 那么他在内存中的表达形式

// 128
00000000 00000000 00000000 10000000 // 正数源码、反码、补码都一样

此时把它转成 byte 类型,byte 只有 8 位,也就是它只能存储低 8 位

// 128
10000000 // 注意,这是补码

注意它的符号位此时是 1,所以它是 -128。这也是 byte 类型所能表示的最小值。

(byte)129 呢?

32 位 129 的内存存储是

// 129
00000000 00000000 00000000 10000001 // 正数源码、反码、补码都一样

转成 8 位 byte 类型

// 129
10000001 // 注意,这是补码

10000001 的源码是 11111111,就是 -127。

依次类推:

(byte)255 == -1 // true

关于 Porco

Wechat: porco5555

Gmail: zhangporco@gmail.com