
【計】 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++等語言中,>>
運算符對無符號數自動執行邏輯移位,對有符號數則可能為算術移位(編譯器依賴)。明确需要邏輯移位時建議顯式使用無符號類型。
安息香華跛行的不支付單獨訊問點數單據多功能模塊二苯甲酮工商所得稅國際法上的海盜肩胛降動脈鍵盤語言錦标賽痙攣性膀胱晶纖維蛋白冷凝了的零電流電路零移瘘管鑷歐薄荷否極泰來錢币狀角膜炎氣概契約的重新生效上颌腺水合離子水流水手的語言貼現商行晚間溫度