byte是有符号的,大于0x80的数用byte表示就是负数(因为高位就是符号位,高位是1表示负数),所以也就是用补码的形式存储 如果要恢复成原码,可以转成比byte宽度更大的数据,如转成char或short,int等等 for example byte b = (byte)0x80; System.out.printf("%d=0x%02x\n", b, b); char c = (char)(b & 0x00ff); System.out.printf("%d=0x%02x\n", (int)c, (int)c); short s = (short)(b & 0x00ff); System.out.printf("%d=0x%02x\n", s, s); int i = b & 0x00ff; System.out.printf("%d=0x%02x\n", i, i);
如果要恢复成原码,可以转成比byte宽度更大的数据,如转成char或short,int等等
for example
byte b = (byte)0x80;
System.out.printf("%d=0x%02x\n", b, b);
char c = (char)(b & 0x00ff);
System.out.printf("%d=0x%02x\n", (int)c, (int)c);
short s = (short)(b & 0x00ff);
System.out.printf("%d=0x%02x\n", s, s);
int i = b & 0x00ff;
System.out.printf("%d=0x%02x\n", i, i);
return 0x000000ff & a;
byte数据只能表示-128~127 256个数字。0x00~0x79表示正数,0x80~0xFF表示负数。。
大于0x80的数?如果它是一个byte,那么它必然是一个负数。区分?区分啥呐?例如0x80,它在byte就是代表-128。。如果你想让它表示128,没问题啊,,数据类型转换。。int c = (0x80 & 0xff);
//(c = 0x00000080)