Java中使用无符号基本数据类型
2015-11-04 11:59
507 查看
Java中使用无符号基本数据类型
我们都知道Java的整形数据类型都是有符号的,并没有提供无符号数据类型。但是可以通过特殊的方法,可以让我们使用无符号数据类型。比如byte类型范围是-128 - 127,如果存在无符号byte类型,那么范围应该是0-255,为了保存更大的范围的数,我们可以使用比byte类型范围大的数据类型保存byte值。然后只保留最后8位并将其他位置的2进制置0(& 0xff)就可以了。
如下所示
byte byteNum = (byte)255; // byteNum == -1; int intNum = (int)byteNum; // intNum == -1; int UnByteNum = intNum & 0xff; // UnByteNum = 255;
第一行代码:
255(int)-> 1111 1111
1111 1111 最高位是1,所以值为负。具体的值为补码值
1111 1111 按位取反 0000 0000
0000 0000 + 1 -> 0000 0001 表示1
所以,byteNum = -1;
第二行代码:
byteNum为1111 1111
intNum 范围是 -2^31 - 2^31 - 1,所以需要补位。
强制类型转换中,若被转换的数最高位为1,则补1,否则补0。
intNum: 1111 1111 1111 1111 1111 1111 1111 1111
同理求补码,值为-1
第三行代码:
通过位运算,保留最后8位,其他位置0。
更简洁的写法:
byte byteNum = (byte)255; int unByteNum = byteNum & 0xff;
0xff是整型,byte类型与int做运算会发生自动类型转换,精度低的自动转换为精度高的。
所以实质上与上面的代码一样。
除此之外,如果一个保存了byte值得整形变量与其他非byte值得变量做运算后,不要忘了”& 0xff”。
相关文章推荐
- MySQL中的integer 数据类型
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树