在 java 中,所有的数字都是有符号的,即可以表示负数,也可表示正数,如:byte、short、int、long、float 和 double)。例如:byte,长度为8位;如果是无符号的,则可以表示的范围为 0~2^8(0~255);如果是有符号的,则可以表示的范围为 -128~127。
实例:我们以 0xB8 为例,该实例将借助 Windows 自带的计算器进行分析。如下:
(1)打开计算器,选择“程序员”模式,选择“HEX”,输入B8。如下图:
在上图中,D8 的 二进制 1011 1000,最高位为 1,则为负数(十进制-72)。我们点击“BYTE”按钮,将 byte 扩展为 word。扩展后如下图:
此时,B8扩展为FFB8,但是十进制还是-72,而二进制为 1111 1111 1011 1000,和前面 byte 的二进制 1011 1000,只是在前面添加了8个1。而我们的目的是将二进制 1011 1000 完全当做数字显示,而不把第一位当做符号位。因此,可以使用与(&)操作符,将二进制 1111 1111 1011 1000 前面的 8 个1全部设置为0,得到 0000 0000 1011 1000,这样就得到我们所要的无符号表示了。1111 1111 1011 1000
0000 0000 1111 1111 & 与
------------------------------------
0000 0000 1011 1000
接下来我们就可以写 java 代码来验证,代码如下:public class Test {
public static void main(String[] args) {
byte b = (byte)0xB8;
System.out.println("b=" + b);
short s = (short)b;
System.out.println("s=" + s);
s = (short)(s & 0x00FF);
System.out.println("s=" + s);
}
}
输出结果:b=-72
s=-72
s=184
上面仅仅演示了 byte 的转换方法,short、int 依次类推。