进制
大约 3 分钟
进制
进制介绍
对于整数,有四种表示方式:
- 二进制: 0,1,满2进1.以0b或OB开头
- 十进制: 0 -- 9 满 10 进 1。
- 八进制: 0-7,满 8 进 1,以数字 0 开头表示
- 十六进制: 0-9 及 A(10) - F(15),满 16 进 1.以 0x 或 0X 开头表示。此处的A-F不区分大小写。
演示
// 二进制
int n1 = 0b1010;
// 10 进制
int n2 = 1010;
// 8 进制
int n3 = 01010;
// 16 进制
int n4 = 0x10101;
System.out.println("n1=" + n1);
System.out.println("n2=" + n2);
System.out.println("n3=" + n3);
System.out.println("n4=" + n4);
进制的转换
第一组:
- 二进制转十进制
规则: 从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
八进制转十进制
十六进制转十进制
第二组:
- 十进制转二进制
- 十进制转八进制
- 十进制转十六进制
第三组:
- 二进制转八进制
- 二进制转十六进制
第四组:
- 八进制转二进制
- 十六进制转二进制
原码、反码、补码
- 二进制的最高位是符号位: 0表示正数,1表示负数(口诀: 0 -> 0 1 -> -)
- 正数的原码,反码,补码都一样(三码合一)
- 负数的反码 = 它的原码符号位不变,其它位取反(0 -> 1,1 -> 0)
- 负数的补码 = 它的反码 +1,负数的反码 = 负数的补码 - 1
- 0的反码,补码都是0
- java 没有无符号数,换言之,java中的数都是有符号的
- 在计算机运算的时候,都是以补码的方式来运算的.
- 当我们看运算结果的时候,要看他的原码(重点)
位运算
java 中有 7 个位运算(&、|、^、~、>>、<< 和 <<<)
普通运算符
- 按位与 &:两位全为1,结果为1,否则为0;
- 按位或 |:两位有一个为1,结果为1,否则为0;
- 按位异或 ^:两位一个为0,一个为1,结果为1,否则为0
- 按位取反 ~:0 -> 1,1 -> 0;
演示
/**
* 2&3 推导过程
* 1. 得到2的补码就要先得到2的原码(正数三码合一)
* 00000000 00000000 00000000 00000010(2的原码)
* 00000000 00000000 00000000 00000010(2的补码)
* 2. 得到3的补码就要先得到3的原码(正数三码合一)
* 00000000 00000000 00000000 00000011(3的原码)
* 00000000 00000000 00000000 00000011(3的补码)
* 3. 换位 &
* 2的补码:00000000 00000000 00000000 00000010
* 3的补码:00000000 00000000 00000000 00000011
* &的结果:00000000 00000000 00000000 00000010
* 4. &的结果转位十进制:2
* 所以最终输出为 2
*/
Syetem.out.println(2&3);
/**
* ~-2 推导过程
* 1. 得到-2的补码就要先得到-2的原码和反码
* 10000000 00000000 00000000 00000010(-2的原码)
* 11111111 11111111 11111111 11111101(-2的反码)
* 2. 得到-2的补码就要在-2的反码基础上加1
* 11111111 11111111 11111111 11111110(-2的反码)
* 3. 运算 按位异或^
* 00000000 00000000 00000000 00000001(原码)
* 4. 结果转位十进制:1
* 所以最终输出为 1
*/
Syetem.out.println(~-2);
位移运算符(>>、<< 和 >>>)
运算规则
- 算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
- 算术左移 <<:符号位不变,低位补0
- “ >>> ”逻辑右移也叫无符号右移, 运算规则是: 低位溢出,高位补 0
- **特别说明:**没有 <<< 符号
演示
System.out.println(1 >> 2); // 0
System.out.println(1 << 2); // 4
System.out.println(4 << 3); // 4 * 2 * 2 * 2 = 32
System.out.println(15 >> 2); // 15 / 2 / 2 = 3
练习
1. 计算下列表达是的结果
10/3 = ?;
10 / 5 = ?;
10 % 2 = ?;
-10 % 3 = ?;