java里byte转int需要&ff的原因
来源:互联网 发布:最快bt下载软件 编辑:程序博客网 时间:2024/06/06 16:26
1.
InputStream.read()方法.
read()方法说明是返回读取到的一个字节,但是为什么返回类型是int而不是byte呢?
原因在于byte类型是8位,也就是8个0或1组成的一串。java里第一位是0表示正数,第一位是1表示负数。
而ascii码的范围是0~255,但是一个byte的八位 最多表示~128 - 127 的范围(第一位符号位,所以只有剩下的7位表示大小)。
这时候假如read()读取到一个字节是10101010 ,这时候不考虑符号位,直接计算大小 就是170 考虑符号位就是 -86(反码需要全部位取反再加1).
而ascii码是没有负数的,所以应该返回的是 170,而不是 -86 .
这时候通过 byte & 0x ff 就能得到170 . (0xff 是int类型,其实是0x000000ff ,也是00000000000000000000000011111111).
运算完之后的结果就是 在原来byte的八位 前面加了 24个0,变成了int类型(这时候第一位是0,变成正数了)
2.
我们用Integer.toHexString(int value) 这个方法时,需要传递一个int类型,假如我们要输出一个byte类型的十六进制字符串表示该怎么办呢?
假如byte 是 10101010 ,那么应该输出0xAA 。 假如我们直接把这个byte传给Integer.toHexString(int value) ,那么byte会被转成int ,这时候转换规则是 符号位 是什么,前面24位就添加什么。 这时候符号位是1, 转成int后就是 11111111 11111111 11111111 10101010 ,它的十六进制字符串表示为 0xffffffAA, 很显然 0xffffffAA 和 0xAA是不一样的(0xAA 是 0x000000AA) ,所以我们通过 byte & 0xff ( 0xff就是0x000000ff) ,这样前面24位就清零了 于是 10101010 & 0xff 运算结果等于 0x000000AA,这时候传给Integer.toHexString 就能显示0xAA了,
*需要注意的是 这仅仅是正确的十六进制字符串表示,
原来的byte数是10101010,是个负数,按java反码的规则,它表示十进制的-86
直接转换成int ,也就是 (int)10101010 后变成 11111111 11111111 11111111 10101010,这时候按反码规则计算后也是 -86
但是&0xFF后, 变成了00000000 00000000 00000000 10101010,这时候变成正数了,表示170.(并不是之前byte表示的-86,但是这时候的16进制字符串才正确)
- java里byte转int需要&ff的原因
- Java byte转int
- java中 int 转 byte 的规律
- java中 int 转 byte 的规律
- Java中byte转int的方法
- java里的byte
- java中byte(byte []), int的转换
- java int转byte出现负数 byte转int的解决
- java 中 byte转Int
- JAVA byte[] 转 int 备忘
- java 中 byte转Int .
- java语言 byte[]转int
- Java中byte转int
- Java中byte转换int时与0xff进行与运算的原因
- Java中byte转换int时与0xff进行与运算的原因
- Java中byte转换int时与0xff进行与运算的原因
- Java中byte转换int时与0xff进行与运算的原因
- Java中byte转换int时与0xff进行与运算的原因
- java基础杂谈(四)之protected
- UIImage的几种初始化方式以及在UIImageView中内容模式的设置 1,使用 imageWithContentsOfFile:初始化 UIImage *image = [U
- PHP实现 微信--分享朋友链接
- SVG基础三:嵌入HTML文档
- 【转】react-native-微信支付问题总结
- java里byte转int需要&ff的原因
- 命令符控制台source方式导入mysql数据库表,注释乱码问题
- ajax 设置Access-Control-Allow-Origin实现跨域访问
- android在style中使用自定义属性 error: style attribute not found.
- 文本摘要评测工具ROUGE的搭建和测试
- java的数据类型
- 矩阵降维-将矩阵按照某列进行排序
- 【备忘】DB2数据库性能优化视频教程下载
- CSS3@font-face