Learning_Java_Day_3

进制

  1. 二进制:以 0b0B 开头
  2. 八进制:以 0 开头
  3. 十六进制:以 0x0X 开头,A - F 不区分大小写
				int n1 = 0b1010; // 二进制
				int n2 = 037; // 八进制
				int n3 = 0x3f; // 十六进制

原码、反码、补码

0 的反码、补码均为 0

Java 不存在 无符号数 ,换言之,所有数字都是 有符号

计算机运算时采用 补码 方式运算

我们看运算结果时,看的是 原码

位运算符

Java 中有 7 个位运算符:

& 按位与 | 按位或 ^ 按位异或 ~ 按位取反 >> 算术右移 低位溢出,符号位不变,并用符号位补溢出的高位 << 算术左移 符号位不变,低位补 0 >>> 逻辑右移也叫无符号右移 低位溢出,高位补 0 特别说明:没有 «< 符号

~ 按位取反为例,前 4 个同理

				//先将数字全部转成 2 进制补码,再做运算,最后转成的原码即为结果
				/*
				1. 先将 2 转为补码,因为是正数,那么就是原码, int 为 4 字节, 则有 4*8=32 个 bit 位
				00000000 00000000 00000000 00000010 注意,首位为符号位, 0 为正, 1 为负
				2. 执行按位取反操作
				11111111 11111111 11111111 11111101
				3. 将上步运算结果转成原码
				11111111 11111111 11111111 11111101 很明显,此补码为负数(符号位为 1 ),应先转为反码,再转为原码
				11111111 11111111 11111111 11111100 转换成反码
				10000000 00000000 00000000 00000011 转换成原码,数值位为 3 ,符号位为 1 ,为负数,则结果为 -3
				*/
				System.out.println(~2); // 输出 -3
				//先将数字全部转成 2 进制补码,再做运算,最后转成的原码即为结果
				int a = 3 << 4; // 相当于 3*2的4次幂,输出 48
				int b = 55 >> 3; // 相当于 55/2/2/2,则为 27/2/2,13/2,输出 6

取模

a % b 当 a 为 小数 时,公式 = a - (int) a / b * b

				int c = -10.5 % 3; // -10.5 - (-10)/3 * 3,先化简为 -10.5 + 10/3 * 3 再计算,输出 -1.5
				int d = -10.4 % 3; // 输出 -1.4 的近似值
使用 Hugo 构建
主题 StackJimmy 设计