原码、反码、补码、进制()

原码、反码、补码及进制

原码、反码、补码(重点、难点)

  • 二进制的最高位是符号位:0表示整数,1表示负数;
  • 正数的原码,反码,补码都一样(三码合一);
  • 负数的反码 = 它原码的符号位不变,其他位取反;原码= 它反码的符号位不变,其他位取反
  • 负数的补码 = 它的反码+1,反之也是负数的反码 = 负数的补码-1;
  • 0的反码,补码都是0;
  • java中的数都是有符号的;
  • 在计算机运算的时候,都是以补码的方式来运算的;
  • 当我们看运算结果的时候,要看它的原码;
  • 位运算,先得到数的原码—>得到反码—>得到补码(进行位运算,得到结果的补码)—>得到结果的反码—>得到结果的原码
  2&3 ~-2 ~2 2|3 2^3
原码 00000000 00000000 00000000 00000010(2的原码) 10000000 00000000 00000000 00000010 00000000 00000000 00000000 00000010 00000000 00000000 00000000 00000011(3的原码)  
反码 同上 11111111 11111111 11111111 11111101 同上 同上 同上
补码 同上 11111111 11111111 11111111 11111110 同上 同上 同上
运算后的补码 00000000 00000000 00000000 00000010 00000000 00000000 00000000 00000001 11111111 11111111 11111111 11111101 00000000 00000000 00000000 00000011 00000000 00000000 00000000 00000001
运算后的反码 同上 00000000 00000000 00000000 00000001 11111111 11111111 11111111 11111100 同上 同上
原码 同上(2) 同上(1) 10000000 00000000 00000000 00000011(-3) 同上(3) 同上(1)
  • 高位补0

    &:按位与,如果相应位都是1,则结果为1,否则为0

    |:按位或,如果对应位有1,则结果为1,否则为0

    ^:按位异或,如果相应位值不同,则结果为1,否则为0

    ~:按位取反,二进制数的每一位,0变成1,1变成0

    <<:算数左移,符号位不变,低位补0;按位左移运算符。乘于进制(2,8,10,16)eg:int a = 1<< 2;//1*2*2 = 4;a<>:算数右移,低位溢出,用符号位补溢出的高位;按位右移运算符。除以进制(2,8,10,16)eg:int a = 1>> 2;//1/2/2 = 0;a>>b;即a/2,计算b次

    >>>逻辑右移,也叫无符号右移,低位溢出,高位补0;

  • &:按位与,如果相应位都是1,则结果为1,否则为0
  • |:按位或,如果对应位有1,则结果为1,否则为0
  • ^:按位异或,如果相应位值不同,则结果为1,否则为0
  • ~:按位取反,二进制数的每一位,0变成1,1变成0
  • <<:算数左移,符号位不变,低位补0;按位左移运算符。乘于进制(2,8,10,16)eg:int a = 1<< 2;//1*2*2 = 4;a<
1*2*2 = 4;a<<b;即a*2,计算b次
  • >>:算数右移,低位溢出,用符号位补溢出的高位;按位右移运算符。除以进制(2,8,10,16)eg:int a = 1>> 2;//1/2/2 = 0;a>>b;即a/2,计算b次
  • >>>逻辑右移,也叫无符号右移,低位溢出,高位补0;

进制

  • 二进制0b:转八进制,每三位一组,转出对应的八进制;转十六进制,每四位一组,转为对应的十六进制
  • 八进制0:转二进制,将每一位转成一个3位的二进制数;
  • 十进制:
  • 十六进制0x:转二进制,将每一位转成一个4位的二进制数;

    其他(a)进制转十进制:每一个位上的数×a^(位数-1)的和;

    十进制转其他(a)进制:将该数不断除以a,直到商为0,将得到的余数从后至前排列,即为a进制数;

  • 其他(a)进制转十进制:每一个位上的数×a^(位数-1)的和;
  • 十进制转其他(a)进制:将该数不断除以a,直到商为0,将得到的余数从后至前排列,即为a进制数;
————————

原码、反码、补码及进制

原码、反码、补码(重点、难点)

  • 二进制的最高位是符号位:0表示整数,1表示负数;
  • 正数的原码,反码,补码都一样(三码合一);
  • 负数的反码 = 它原码的符号位不变,其他位取反;原码= 它反码的符号位不变,其他位取反
  • 负数的补码 = 它的反码+1,反之也是负数的反码 = 负数的补码-1;
  • 0的反码,补码都是0;
  • java中的数都是有符号的;
  • 在计算机运算的时候,都是以补码的方式来运算的;
  • 当我们看运算结果的时候,要看它的原码;
  • 位运算,先得到数的原码—>得到反码—>得到补码(进行位运算,得到结果的补码)—>得到结果的反码—>得到结果的原码
  2&3 ~-2 ~2 2|3 2^3
原码 00000000 00000000 00000000 00000010(2的原码) 10000000 00000000 00000000 00000010 00000000 00000000 00000000 00000010 00000000 00000000 00000000 00000011(3的原码)  
反码 同上 11111111 11111111 11111111 11111101 同上 同上 同上
补码 同上 11111111 11111111 11111111 11111110 同上 同上 同上
运算后的补码 00000000 00000000 00000000 00000010 00000000 00000000 00000000 00000001 11111111 11111111 11111111 11111101 00000000 00000000 00000000 00000011 00000000 00000000 00000000 00000001
运算后的反码 同上 00000000 00000000 00000000 00000001 11111111 11111111 11111111 11111100 同上 同上
原码 同上(2) 同上(1) 10000000 00000000 00000000 00000011(-3) 同上(3) 同上(1)
  • 高位补0

    &:按位与,如果相应位都是1,则结果为1,否则为0

    |:按位或,如果对应位有1,则结果为1,否则为0

    ^:按位异或,如果相应位值不同,则结果为1,否则为0

    ~:按位取反,二进制数的每一位,0变成1,1变成0

    <<:算数左移,符号位不变,低位补0;按位左移运算符。乘于进制(2,8,10,16)eg:int a = 1<< 2;//1*2*2 = 4;a<>:算数右移,低位溢出,用符号位补溢出的高位;按位右移运算符。除以进制(2,8,10,16)eg:int a = 1>> 2;//1/2/2 = 0;a>>b;即a/2,计算b次

    >>>逻辑右移,也叫无符号右移,低位溢出,高位补0;

  • &:按位与,如果相应位都是1,则结果为1,否则为0
  • |:按位或,如果对应位有1,则结果为1,否则为0
  • ^:按位异或,如果相应位值不同,则结果为1,否则为0
  • ~:按位取反,二进制数的每一位,0变成1,1变成0
  • <<:算数左移,符号位不变,低位补0;按位左移运算符。乘于进制(2,8,10,16)eg:int a = 1<< 2;//1*2*2 = 4;a<
1*2*2 = 4;a<<b;即a*2,计算b次
  • >>:算数右移,低位溢出,用符号位补溢出的高位;按位右移运算符。除以进制(2,8,10,16)eg:int a = 1>> 2;//1/2/2 = 0;a>>b;即a/2,计算b次
  • >>>逻辑右移,也叫无符号右移,低位溢出,高位补0;

进制

  • 二进制0b:转八进制,每三位一组,转出对应的八进制;转十六进制,每四位一组,转为对应的十六进制
  • 八进制0:转二进制,将每一位转成一个3位的二进制数;
  • 十进制:
  • 十六进制0x:转二进制,将每一位转成一个4位的二进制数;

    其他(a)进制转十进制:每一个位上的数×a^(位数-1)的和;

    十进制转其他(a)进制:将该数不断除以a,直到商为0,将得到的余数从后至前排列,即为a进制数;

  • 其他(a)进制转十进制:每一个位上的数×a^(位数-1)的和;
  • 十进制转其他(a)进制:将该数不断除以a,直到商为0,将得到的余数从后至前排列,即为a进制数;