Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 6 additions & 10 deletions docs/src/io/buffer.md
Original file line number Diff line number Diff line change
Expand Up @@ -199,22 +199,24 @@ byte 类型是有符号的,即其取值范围为 -128 到 127。如果我们

& 运算是一种二进制数据的计算方式, 两个操作位都为1,结果才为1,否则结果为0. 在上面的 `getBufIfOpen()[pos++] & 0xff` 计算过程中, byte 有 8bit, OXFF 是16进制的255, 表示的是 int 类型, int 有 32bit.

Java中,byte类型参与运算时会自动提升为int类型,高位通过符号位扩展填充,正数补0,负数补1,byte & 0xFF会先将byte类型提升为int类型,然后将高24位置为0,去掉符号位的影响,仅保留低8位的原始值,从而得到原byte类型值的无符号整数值。

如果 `getBufIfOpen()[pos++]` 为 -118, 那么其原码表示为

```
00000000 00000000 00000000 10001010
10000000 00000000 00000000 01110110
```

反码为

```
11111111 11111111 11111111 11110101
11111111 11111111 11111111 10001001
```

补码为

```
11111111 11111111 11111111 11110110
11111111 11111111 11111111 10001010
```

0XFF 表示16进制的数据255, 原码, 反码, 补码都是一样的, 其二进制数据为
Expand All @@ -225,12 +227,6 @@ byte 类型是有符号的,即其取值范围为 -128 到 127。如果我们

0XFF 和 -118 进行&运算后结果为

```
00000000 00000000 00000000 11110110
```

还原为原码后为

```
00000000 00000000 00000000 10001010
```
Expand Down Expand Up @@ -449,4 +445,4 @@ GitHub 上标星 10000+ 的开源知识库《[二哥的 Java 进阶之路](https

微信搜 **沉默王二** 或扫描下方二维码关注二哥的原创公众号沉默王二,回复 **222** 即可免费领取。

![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png)
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png)