
【计】 nonarithmetic
blame; evildoing; have to; non-; not; wrong
【计】 negate; NOT; not that
【医】 non-
【计】 arithmetic shift
在数字系统与计算机工程领域,非算术移位(Non-Arithmetic Shift) 通常指逻辑移位(Logical Shift),其核心特征是在移位过程中不保留符号位的数值意义,仅将二进制数视为无符号位串进行处理。以下是其详细解释:
逻辑左移(Logical Left Shift)
所有位向左移动指定位数,右侧空位补零,左侧溢出的位直接丢弃。
数学表达:
$$ x_{text{new}} = x times 2^k mod 2^n $$
其中 (x) 为原数值,(k) 为移位位数,(n) 为总位数。
逻辑右移(Logical Right Shift)
所有位向右移动指定位数,左侧空位补零,右侧溢出的位丢弃。
数学表达:
$$ x_{text{new}} = leftlfloor frac{x}{2^k} rightrfloor $$
算术移位保留符号位(最高位),右移时通过符号扩展保持数值的正负性;逻辑移位则无视符号位,统一补零。
逻辑移位适用于无符号数或位串操作(如标志位处理),而算术移位用于有符号数的乘除运算优化。
位掩码操作
在嵌入式系统中,逻辑移位常用于提取或设置寄存器特定位(如配置硬件外设)。
示例:
uint32_t config_reg = 0x08;
config_reg = config_reg << 4; // 将第3位移至第7位
哈希算法与编码
逻辑移位是CRC校验、哈希函数(如SHA-1)中比特重组的核心操作。
数据封装/解封装
网络协议(如TCP/IP头部解析)通过逻辑移位组合或拆分多字节字段。
IEEE标准
逻辑移位的定义与实现遵循二进制整数运算规范,参见IEEE 754标准中对位操作的基础描述。
IEEE 754-2019 Standard(需订阅访问)
计算机体系结构经典文献
Hennessy与Patterson所著《计算机体系结构:量化研究方法》详细对比算术/逻辑移位的硬件实现差异。
编程语言规范
C/C++标准(ISO/IEC 9899:2018)明确区分 <<
(逻辑左移)与算术右移 >>
的行为。
特性 | 逻辑移位 | 算术移位 |
---|---|---|
符号位处理 | 始终补零 | 左移补零,右移符号扩展 |
数值意义 | 仅作为位串操作 | 保持二进制补码的数值语义 |
典型指令 | SHL (x86), LSL (ARM) |
SAL /SAR (x86), ASR (ARM) |
此解释基于计算机工程领域的通用定义,实际实现可能因处理器架构(如x86/ARM/RISC-V)存在微差异。
非算术移位是计算机中一种二进制位操作方式,其核心特点是移位过程中不保留符号位(即最高位的符号信息)。与算术移位不同,它通常用于无符号数或特定场景的数值处理。
逻辑移位(最典型的非算术移位)
0011
左移1位变为 0110
。1100
右移1位变为 0110
。循环移位
对比项 | 非算术移位(逻辑移位) | 算术移位 |
---|---|---|
符号位处理 | 不保留符号位 | 右移时保留符号位 |
填充方式 | 空位补0 | 右移时填充符号位 |
适用数据类型 | 无符号整数 | 有符号整数(补码) |
10110010
(十进制-78补码形式):01011001
(十进制89)11011001
(十进制-39)注意:在C/C++等语言中,>>
运算符对无符号数自动执行逻辑移位,对有符号数则可能为算术移位(编译器依赖)。明确需要逻辑移位时建议显式使用无符号类型。
苯呋地尔琥珀酸酯材料费用分配表磁晶各向磁力场第一脑室概率比例抽样法公民正常义务关键事实合法同居的不可能性交流畸函数静电印刷术旷课的昆虫采集家氯化四苯┾镎Np诺尔斯霉素普雷迈尔胶体磨顷人寿保险契约少爷社团简约使不一致四方晶系唐昌蒲青霉酸瞳孔不等唾液腺素外埠