java中byte(负值)作&运算时0xff的作用
2016-06-29 20:44
375 查看
1.问题由来
项目中遇到一个将byte字节流转换成有符号整数和无符号整数的,发现:
byte aByte = ByteBuffer.get();----对应的二进制各位
如果byte为正数:int value = (byte)aByte ----> 比如 传输8位bits为
0x7f
转化为字节为:aByte=127: 01111111 转化为 int 就是:00000000 00000000 00000000 01111111
如果byte为负数:int value = (byte)aByte ---->比如 传输8位bits为
0xff
转化为字节为:aByte=-1 : 11111111 转化为 int 就是:11111111 11111111 11111111 11111111
(注意:负数在计算机中以补码方式存储 所以有: -1= [10000001]原->[111111110]反->[11111111]补)
那么转化为无符号整数就不能直接转byte值。(负数或者>127的正数都不行)
那么问题是:如何把byte值还原成无符号值并放入int 中
2.解决方法
首先,参考自一个博客:http://www.360doc.com/content/10/0813/21/495229_45854066.shtml
这里面解释了byte转int要与0xff与的原因。
经典的例子是:
(1)System.out.println((byte)-1);// -1
(2)System.out.println((byte)-1 & 0xff);// 255
(1)中,(byte)-1自动转化成int,由于位数拓展了,负数位数拓展(8bit--->32bit),则补1,值发生了改变
(2)中,(byte)-1 &0xff 则,byte转成int
即11111111 11111111 11111111 11111111 & 00000000 00000000 00000000 11111111(0xff)
前24位被置零,所以得到最初的0xff值
项目中遇到一个将byte字节流转换成有符号整数和无符号整数的,发现:
byte aByte = ByteBuffer.get();----对应的二进制各位
如果byte为正数:int value = (byte)aByte ----> 比如 传输8位bits为
0x7f
转化为字节为:aByte=127: 01111111 转化为 int 就是:00000000 00000000 00000000 01111111
如果byte为负数:int value = (byte)aByte ---->比如 传输8位bits为
0xff
转化为字节为:aByte=-1 : 11111111 转化为 int 就是:11111111 11111111 11111111 11111111
(注意:负数在计算机中以补码方式存储 所以有: -1= [10000001]原->[111111110]反->[11111111]补)
那么转化为无符号整数就不能直接转byte值。(负数或者>127的正数都不行)
那么问题是:如何把byte值还原成无符号值并放入int 中
2.解决方法
首先,参考自一个博客:http://www.360doc.com/content/10/0813/21/495229_45854066.shtml
这里面解释了byte转int要与0xff与的原因。
经典的例子是:
(1)System.out.println((byte)-1);// -1
(2)System.out.println((byte)-1 & 0xff);// 255
(1)中,(byte)-1自动转化成int,由于位数拓展了,负数位数拓展(8bit--->32bit),则补1,值发生了改变
(2)中,(byte)-1 &0xff 则,byte转成int
即11111111 11111111 11111111 11111111 & 00000000 00000000 00000000 11111111(0xff)
前24位被置零,所以得到最初的0xff值
相关文章推荐
- Spring在xml文件中配置bean
- Spring框架入门(一)
- java命名规则
- eclipse安装hadoop插件
- java中创建file对象成功后,可以进行的操作
- mapreduce
- Hello freeMarker
- 字符串字母全排列练习
- 无法在JDK源码中设置断点---- unable to install breakpoint in ....due to missing line number attributes
- 用Java备份MySQL
- java 时间格式转换
- Java 的synchronized 的复习 一
- Spring 源码学习之BeanFactoryAware
- 基于SpringMVC的RESTful API设计
- [2016/06/29] LeetCode / Java - Day 07 -
- Java反射中的范型相关类
- JAVA常见小问题
- SpringMVC入门-第一节:简介
- Java 反射调用动态方法
- java如何给单片机串口发送一个16进制的命令