public static void main(String[] args) { int a = -10 ; for(int i=0;i<32;i++){ int t = (a & 0x80000000>>>i)>>>(31-i); System.out.print(t); } // String binaryString = Integer.toBinaryString(-10); // System.out.println(binaryString); }
二、分析流程
JAVA 中 int 4 字节 = 4*8 = 32 bit 32位
十:10
二:00000000000000000000000000001010(原码,即机器数)
反:11111111111111111111111111110101
补:11111111111111111111111111110110(原码的补码即负数的原码)
十:-10(负数:正数的原码取反码再加1,即原码的补码)
二:11111111111111111111111111110110
>>> 强制向右移动,优先级高于 &
0x 十六进制
0x80000000 = 10000000000000000000000000000000(二)
i=0
10000000000000000000000000000000 >>> 0 = 10000000000000000000000000000000
10000000000000000000000000000000
&11111111111111111111111111110110
---------------------------------
10000000000000000000000000000000
10000000000000000000000000000000 >>> 31 = 1
i=1
10000000000000000000000000000000 >>> 1 = 01000000000000000000000000000000
01000000000000000000000000000000
&11111111111111111111111111110110
---------------------------------
01000000000000000000000000000000
01000000000000000000000000000000 >>> 30 = 1
a & 0x80000000>>>i 取a左侧第i位,其余位均为0
(a & 0x80000000>>>i)>>>(31-i) 右移动31-i位,右移左侧补0,移动后剩余上面操作的第i位的数字,即将第i位移动到最数字末位,左侧全部为0
功能:输出十进制的二进制表达式
博文参考:
Java打印整数的二进制表示(代码与解析)