From 1ec3d4d1791bf2454ffdcf99f656e55d7249dd31 Mon Sep 17 00:00:00 2001 From: bmbjx Date: Tue, 11 Nov 2025 21:20:08 +0800 Subject: [PATCH] Update buffer.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正了文章中错误的原码、反码和补码,补充了byte & 0xFF中类型提升的细节。 --- docs/src/io/buffer.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/docs/src/io/buffer.md b/docs/src/io/buffer.md index a1aac38fd..52381b939 100644 --- a/docs/src/io/buffer.md +++ b/docs/src/io/buffer.md @@ -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, 原码, 反码, 补码都是一样的, 其二进制数据为 @@ -225,12 +227,6 @@ byte 类型是有符号的,即其取值范围为 -128 到 127。如果我们 0XFF 和 -118 进行&运算后结果为 -``` -00000000 00000000 00000000 11110110 -``` - -还原为原码后为 - ``` 00000000 00000000 00000000 10001010 ``` @@ -449,4 +445,4 @@ GitHub 上标星 10000+ 的开源知识库《[二哥的 Java 进阶之路](https 微信搜 **沉默王二** 或扫描下方二维码关注二哥的原创公众号沉默王二,回复 **222** 即可免费领取。 -![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png) \ No newline at end of file +![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png)