移位运算是计算机中最基本的运算之一,分为逻辑移位、算术移位和循环移位三类。
逻辑移位将数据视为无符号数,空位补 0。
算术移位将数据视为有符号数(补码),保持符号位不变。
循环移位中移出的位从另一端移入,不会丢失。
原始: 0000_1101 (13) 左移2位:0011_0100 (52) 验证:13 × 4 = 52 ✓
原始: 0011_0100 (52) 右移2位:0000_1101 (13) 验证:52 ÷ 4 = 13 ✓
原始(补码): 0011_0100 (+52) 左移1位: 0110_1000 (+104) 验证:52 × 2 = 104 ✓
原始(补码): 1111_0011 (-13) 右移1位: 1111_1001 (-7) (向负无穷取整) 验证:-13 ÷ 2 = -6.5 → 向下取整 = -7 ✓
8位寄存器:1011_0010 循环左移1位:0110_0101 (最高位1移到最低位) 循环左移2位:1100_1010
CF=0, 寄存器=1011_0010 RCR 1位后:CF=0, 寄存器=0101_1001 (最低位移入CF,CF旧值移入最高位)
乘法通过移位 + 加法实现:$A \times 13 = A \times (8+4+1) = (A<<3) + (A<<2) + A$。
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。