java获取某个数的二进制数的后8位,并以十六进制的形式输出
获取60对应的二进制数的低八位,并以十六进制形式显示结果:
为了方便观看,我就每四位2进制数之间加一个 “-”,实际的数是没有"-"的
0000-0000 0000-0000 0000-0000 0011-1100 =60
60&15=12; //获取低四位
0000-0000 0000-0000 0000-0000 0011-1100
&0000-0000 0000-0000 0000-0000 0000-1111
0000-0000 0000-0000 0000-0000 0000-1100 =12 ->C (对应的十六进制)
temp =60>>4 //右移四位,因为这里是正数,所以用>>或>>>都是可以的
temp & 15 =3 //再取右移后的低四位
0000 0000-0000 0000-0000 0000-0000 0011-1100
&0000-0000 0000-0000 0000-0000 0000-1111
0000-0000 0000-0000 0000-0000 0000-0011 =3
对应代码:
int num = 60;
int n1 = num & 15;
System.out.println((char)(n1-10+'A')); //结果:C
num = num>> 4;
int n2 = num & 15;
System.out.println(n2); //结果:3
在上述代码,int n1 = num & 15;和int n2 = num & 15;
中,假如我们没有事先计算n1,n2,那么我们是如何得知n1(n2)大于9还是小于9呢?这就用到三元运算符
(此处暂且不用if语句,而用三元运算符来实现试试)
修改后的代码:
int num = 60;
int n1 = num & 15; //获取低四位
System.out.println(n1>9?(char)(n1-10+'A'):n1); //67
num = num>>>4;
int n2 = num & 15;
System.out.println(n2>9?(char)(n2-10+'A'):n2);//3
修改后我们发现低四位出现67,而不是C,这是为啥呢?为找出原因,我又进行了其他的测试:
System.out.println(10>9?'A':3); //A
System.out.println(10>9?4:5); //4
System.out.println(10>9?(char)65:5); //A
System.out.println(10>9?1+'A':5);//66
System.out.println(10>9?(char)(1+'A'):5);//B
int n=4;
System.out.println(10>9?(char)(n-1+'A'):5);//D
(预览格式和编辑的格式不一样,我也不晓得咋tiao'zheng)
这些测试都没毛病,可是为啥修改后的代码,就只是多了与运算,低四位输出就不是C,而是C对应的ASCII码了呢?难道是进制的问题?有大佬晓得这是啥问题吗?