《二进制图文深度解析》一书通过丰富图表与详实解说,深入浅出地讲解了计算机科学中的核心概念——二进制系统。书中内容涵盖基础原理到实际应用,适合编程爱好者和技术从业者阅读学习。
二进制计数规则是逢二进一,在计算机内部一切数据都以2进制形式存储。
补码是一种处理负数的方式,它通过将一部分数字视为负数值来实现这一目标。在内存中,这些值是以2进制的形式存在的,但在显示时通常会转换成10进制的格式。Java提供了几个方法支持这种计算:`Integer.parseInt()` 用于解析整型字符串;`Integer.toString()` 则可以将整数转为字符串形式。
然而,补码也存在一些缺点:
- 它不支持超出范围的运算;
- 超出范围时会自动溢出。可以通过使用更大位数(如int、long)来解决这一问题。
在Java中计算 -2-1 的补码遵循以下规律:
1. 最大值和最小值有特定的形式:
- 对于 int 类型:最大值是31个1,最高位为0;最小值则相反。
- long 类型的规则与int相同,但长度分别为64位。
2. 负数以最高位表示其符号(负数),正数该位置零。注意此处的符号位并非用来直接标识正负号的!
3. 例如-1 的二进制形式全为1。
4. 溢出遵循周期性规律,如最大值加一即得到最小值。
5. 补码具有对称性质: -n = ~n + 1
以下是一些示例代码:
```java
int max = Integer.MAX_VALUE;
System.out.println(Integer.toBinaryString(max));
int min = Integer.MIN_VALUE;
System.out.println(Integer.toBinaryString(min));
long lmax = Long.MAX_VALUE;
System.out.println(Long.toBinaryString(lmax));
long lmin = Long.MIN_VALUE;
System.out.println(Long.toBinaryString(lmin));
// 输出-1的二进制形式
int n = -1;
System.out.println(Integer.toBinaryString(n));
long l = -1L;
System.out.println(Long.toBinaryString(l));
// 证明最大值加一等于最小值
int m = Integer.MAX_VALUE+1;
System.out.println(m); // 输出为Integer.MIN_VALUE
// 测试溢出情况
n = 345;
m = n + Integer.MAX_VALUE+1;
System.out.println(m);
```
经典面试题:
- 正数的溢出会变成负数(此说法错误)。
- 当执行`int i = Integer.MAX_VALUE+1; System.out.println(Integer.toBinaryString(i));`,输出结果应为D选项:全0加上一个最高位1。
此外还涉及到一些二进制运算符如:
- 与(`&`)和或(`|`)操作用于特定的位处理。
- 右移(`>>`, `>>>`)以及左移(`< < >`)运算是对数字进行重新排列的有效方法。
这些知识在计算机科学中非常重要,特别是在低级编程语言及硬件相关领域内广泛应用。