封面故事:图灵参与破译的恩尼格玛机(Enigma)
逻辑运算
布尔类型
布尔值用于描述真值,只有 True/False 两种状态,1 位即可表示:1 表示真,0 表示假。这里讨论的是编程语境下的数据类型。
逻辑运算均作用于布尔值(单比特)。
非(NOT)
取反:真变假、假变真。
与(AND)
两者同时为真才为真。
或(OR)
两者同时为假才为假。
异或(XOR)
相同为假,不同为真。
移位运算
逻辑移位(Logical shift)
整体向左/向右移动比特串。
- 非循环移位:溢出位丢弃,空位补 0。
- 循环移位:把比特串视为环,移出的一端从另一端补回。
算术移位(Arithmetic shift)
针对带符号数的移位。
- 左移:内容左移并补 0,若符号位发生改变说明溢出。
- 右移:符号位不动,空位由符号位填充(正数补 0,负数补 1)。
算术运算
此处讨论加减。用补码表示时:
- 加法:按位相加,最高位进位丢弃。
- 减法:被减数加上「减数的补码」,转为加法处理。
若发生符号位错误翻转,说明溢出,结果不可信。
当用「符号 + 绝对值」表示时:
- 若是减法,先把第二个数取相反数转为加法;
- 比较符号:同号则绝对值直接相加,符号不变(注意溢出);
- 异号则将较小绝对值取补后与较大绝对值相加,结果符号取绝对值较大的那个;必要时对结果再取补。