首页 > 其他 > 详细

byte & 0xff char 转换

时间:2018-12-04 19:30:34      阅读:200      评论:0      收藏:0      [点我收藏+]

https://blog.csdn.net/lixingtao0520/article/details/75450883

 

版权声明:本文为博主原创文章,转载请注明作者与出处,http://blog.csdn.net/lixingtao0520 https://blog.csdn.net/lixingtao0520/article/details/75450883
     在Java中 byte型数据在内存中占8位,int型数据在内存中占32位。0xff默认为int型,是十六进制,十进制中表示为255,二进制为32位,后八位为‘1111 1111‘,其他24位均为0;在&运算时,2个bit均为1,则得1,否则得0。

     先看以下程序

byte a = -17;
System.out.println(a);
System.out.println((int) a);
System.out.println(a & 0xff);
System.out.println(Integer.toBinaryString((int) a));
System.out.println(Integer.toBinaryString(a & 0xff));
运行程序输出以下结果:

 

技术分享图片


说明:

1、a是byte型时,二进制表示为11101111;即-17(byte型);
2、a在强制转化为int型时,值仍为-17,转换规则:如果是负数,则高位补1,如果是正数,则高位补0。所以,a的值仍为-17(int型),二进制表示形式为‘11111111111111111111111111101111‘。
3、a & 0xff 操作时,因为a为byte型,所以会将a自动转化为int型(高位补1),再与0xff进行&操作,返回的数值二进制表示为‘00000000000000000000000011101111‘(toBinaryString方法省略了左边的0),此数值为239(int型)。
4、byte & 0xff操作一般将byte数据转换成int型,最终的数据只有低8位有数据,其他位为0。
5、Java中byte型转换为int型有两种:一种是保持数值不变,例如进行数值计算时,此时可采用强制类型转换,int b = (int) a ;另外一种是最低字节中各个位不变,高位用0填充,此时需要采用位操作 int b = a & 0xff,例如在编解码时,以及BufferedInputStream中的read方法。
public synchronized int read() throws IOException {
if (pos >= count) {
fill();
if (pos >= count)
return -1;
}
return getBufIfOpen()[pos++] & 0xff;
}

---------------------
作者:BiggerLee
来源:CSDN
原文:https://blog.csdn.net/lixingtao0520/article/details/75450883
版权声明:本文为博主原创文章,转载请附上博文链接!

byte & 0xff char 转换

原文:https://www.cnblogs.com/yaowen/p/10066188.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!