进制

SOBER大约 3 分钟

进制

进制介绍

对于整数,有四种表示方式:

  1. 二进制: 0,1,满2进1.以0b或OB开头
  2. 十进制: 0 -- 9 满 10 进 1。
  3. 八进制: 0-7,满 8 进 1,以数字 0 开头表示
  4. 十六进制: 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);

进制的转换

第一组:

  1. 二进制转十进制

规则: 从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。

  1. 八进制转十进制

  2. 十六进制转十进制

第二组:

  1. 十进制转二进制
  2. 十进制转八进制
  3. 十进制转十六进制

第三组:

  1. 二进制转八进制
  2. 二进制转十六进制

第四组:

  1. 八进制转二进制
  2. 十六进制转二进制

原码、反码、补码

  1. 二进制的最高位是符号位: 0表示正数,1表示负数(口诀: 0 -> 0 1 -> -)
  2. 正数的原码,反码,补码都一样(三码合一)
  3. 负数的反码 = 它的原码符号位不变,其它位取反(0 -> 1,1 -> 0)
  4. 负数的补码 = 它的反码 +1,负数的反码 = 负数的补码 - 1
  5. 0的反码,补码都是0
  6. java 没有无符号数,换言之,java中的数都是有符号的
  7. 在计算机运算的时候,都是以补码的方式来运算的.
  8. 当我们看运算结果的时候,要看他的原码(重点)

位运算

java 中有 7 个位运算(&、|、^、~、>>、<< 和 <<<)

普通运算符

  1. 按位与 &:两位全为1,结果为1,否则为0;
  2. 按位或 |:两位有一个为1,结果为1,否则为0;
  3. 按位异或 ^:两位一个为0,一个为1,结果为1,否则为0
  4. 按位取反 ~: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);


位移运算符(>>、<< 和 >>>)

运算规则

  1. 算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
  2. 算术左移 <<:符号位不变,低位补0
  3. “ >>> ”逻辑右移也叫无符号右移, 运算规则是: 低位溢出,高位补 0
  4. **特别说明:**没有 <<< 符号

演示

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 = ?;

2.试写出将String转换成double类型的语句,以及将char类型转换成String的语句,举例说明即可,写简单代码