首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言右移運算符>>詳解:位運算、算術右移、除2優化

     編輯:C 語言問答

>>> 右移運算符完整語義

語法與類型

  • 二元運算符:operand >> shift_count
  • 左操作數:整數類型 (有符號/無符號)
  • 右操作數:非負整數,超寬度行為未定義
  • 結果類型:與左操作數提升後類型相同

兩種右移模式

範例演示 (8位)

// 無符號
unsigned char u = 0x80;  // 1000 0000 (128)
u >> 1  → 0100 0000 (64)  = 128/2
u >> 2  → 0010 0000 (32)  = 128/4

// 有符號 (補碼)
signed char s = -8;      // 1111 1000
s >> 1  → 1111 1100 (-4)  = -8/2
s >> 2  → 1111 1111 (-1)  = -8/4 向負無窮取整

關鍵特性

  1. 優先級:低於算術運算符,高於關係/邏輯運算符
  2. 結合性:左結合
  3. 優化:編譯器常將 x / 2^n (x無符號或非負) 優化為 x >> n
  4. 未定義行為:移位數 ≥ 位寬、負數移位、有符號負數右移 (C標準為實現定義,但大多數編譯器算術右移)

實際應用場景

  • 快速除以 2 的冪次 (配合無符號或非負有符號)
  • 位域提取:(value >> offset) & mask
  • 網路字節序轉換:(val >> 8) & 0xFF
  • 圖形編程:顏色分量分離
  • 壓縮/加密演算法:位流處理

配套運算符

  • << 左移:低位補 0,等價乘 2^n (無溢出時)
  • & | ^ ~ 位與/或/異或/取反
  • 複合賦值:>>= <<= &= |= ^=
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型名稱高位填充數學等價
無符號邏輯右移0⌊x / 2^n⌋
有符號算術右移符號位複製 (實現定義)向負無窮取整除 2^n