原码、反码、补码、进制()-其他
原码、反码、补码、进制()
原码、反码、补码及进制
原码、反码、补码(重点、难点)
- 二进制的最高位是符号位: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进制数;