java基础-2 进制转换

1.2 进制转换

  1. 十进制转其他进制。如123转为2进制,用123不断除2,得到的余数倒过来就是对应的二进制。转成其他进制同理。

  2. 二进制转八进制,从后往前每3个为一位。如:0b110001100=0b110 001 100=0614.

  3. 二进制转十六进制,从后往前每4个为一位。如:0b110001100=0b1 1000 1100=0x18C.

  4. 位运算:

int a = 1>>2    //1向右位移两位
int a = 1>>>2   //1向右无符号位移2位
~2// 按位取反
-3^3=?   //按位异或
  1. 原码、反码、补码

    • 最高位为符号位:0为正数,1为负数
    • 正数的三个码一样
    • 负数的反码=符号位不变,其他按位取反,补码=反码+1
    • java的数都是有符号的
    • 计算机运行时是以补码运算
    • 显示运算结果时,显示的是原码
    • 例题:2&3 先得到2和3的补码运算,得到的结果转为原码,2的原码(补码为) 2: 00000000 00000000 00000000 00000010(int型4个字节,正数原码与补码一致)
    • 例题:~2 先得到2的补码,按位取反,再得到原码(注意是先得到反码再得到原码)。2的原码:00000000 00000000 00000000 00000010,补码:00000000 00000000 00000000 00000010。按位取反:11111111 11111111 11111111 11111101 ,转为反码:11111111 11111111 11111111 1111100,转为原码:10000000 00000000 00000000 00000011得到结果为-3.
    >> 算数右移:低位溢出(不要),符号位不变,并用符号位补高位   
    << 算数左移:符号位不变,低位补0
    >>>无符号右移(没有<<<):低位溢出,高位补0
        int a=1<<2;    //(简化为8位)000000001->00000100   本质上是1*2*2=4
    	int a=-8>>2;   //负数右移:先求出该负数的补码,然后符号位不变,按位取反后加1得到补码,对补码进行右移,高位补1,最后根据移位后的值,符号位不变,按位取反后加1(补码的补码是原码)得到移位后的值的原码,也就得出了移位后的真实值。10001000->11110111->11111000->11111110->11111101->10000010 本质上是-8/2/2=-2
    

你可能感兴趣的:(java)