关于在输出Hex的时候为什么使用0xff

程序员成长之旅 · 程序员成长之旅/Java学习/笔记 · 536 字

因为在byte转换为int类型的时候,由8位转换为32位,在类型装换的过程中自动将前24位补为1,虽然以int格式输出的时候不会出问题,但是以Hex格式输出的时候会显示出前24位的1,(类似于ffffffe2这样的东西)显然这不是我们想要的所以需要&0xff来过滤掉高24位数据,具体原理 0xf=15=1111 在int(32位)下= 0000 0000 0000 0000 0000 0000 0000 1111 0xff=255=1111 1111 在int(32位)下=0000 0000 0000 0000 0000 0000 1111 1111 所以 byte date= -127 二进制=10000001 int intDate=date; intDate= -127 二进制 1111 1111 1111 1111 1111 1111 1000 0001 而0xff 二进制在int下为 0000 0000 0000 0000 0000 0000 1111 1111

所以 1111 1111 1111 1111 1111 1111 1000 0001

& 0000 0000 0000 0000 0000 0000 1111 1111

0000 0000 0000 0000 0000 0000 1000 0001

1000 0001 而将次按照Hex输出就出现前面那一大串f啦 package HexAndByteStudy; public class test { public static void main(String[] args) { byte[] bytDate = new byte[10]; bytDate[0]=-127;//内存中 1000 0001 System.out.println(bytDate[0]); int intDate1=bytDate[0];//内存中 1111 1111 1111 1111 1111 1111 1000 0001 int intDate2=bytDate[0] & 0xff;//在内存中 0000 0000 0000 0000 0000 0000 1000 0001 System.out.println(intDate1);//以int方式输出 System.out.println(intDate2);//以int方式输出 在32位下符号位不是第八位而是第32位,所以会出现输出不符合预期。 System.out.println(Integer.toHexString(intDate1));//看第11行 System.out.println(Integer.toHexString(intDate2));//看第12行 会自动忽略无意义数据 } }

x

1 package

HexAndByteStudy ; 2 3 4 public

class

test { 5

public

static

void

main ( String [] args ) { 6

byte [] bytDate

=

new

byte [ 10 ]; 7

bytDate [ 0 ] =- 127 ; //内存中 1000 0001 8

System . out . println ( bytDate [ 0 ]); 9

10

int

intDate1

bytDate [ 0 ]; //内存中 1111 1111 1111 1111 1111 1111 1000 0001 11

int

intDate2

bytDate [ 0 ] &

0xff ; //在内存中 0000 0000 0000 0000 0000 0000 1000 0001 12

13

System . out . println ( intDate1 ); //以int方式输出 14

System . out . println ( intDate2 ); //以int方式输出 在32位下符号位不是第八位而是第32位,所以会出现输出不符合预期。 15

16

System . out . println ( Integer . toHexString ( intDate1 )); //看第11行 17

System . out . println ( Integer . toHexString ( intDate2 )); //看第12行 会自动忽略无意义数据 18

19 } 20 } 21