C語言中的 “>>”與“<<”


1. “>>”

int x = 16; printf("%d\n", x >> 1);
先將x轉成二進制 10000, 不讀最后一位, 輸出 1000, 即為8;
右移一位相當於數值除以2

2. “<<”

int x = 16; printf("%d\n", x << 1);
先將x轉成二進制 10000, 往最后再讀取一位(0, 或根據是否已經有移位), 輸出 100000, 即為32;
左移,若移動位數K等於或大於數據長度N,通常只移動K mod N 位數
左移一位相當於數值乘以2

3.注意

以上不包含溢出情況, 且只有能用在int、short int、long int,可能有錯漏。
溢出判斷:

  • 正溢出:正數相加,結果為負數
  • 負溢出:負數相加,結果為正數

4.結論

c語言中"<<"與">>" 被稱為整數的位移運算,位移是以“位(bit簡寫為b)”為單位將數據向左或向右的移動。 (8b = 1B)

5.測試

#include <stdio.h>

int main()
{
    int x = 16;
    printf("%d\n", x >> 3);
    printf("%d\n", x >> 2);
    printf("%d\n", x >> 1);

    printf("%d\n", x << 3);
    printf("%d\n", x << 2);
    printf("%d\n", x << 1);
}

結果為

2
4
8
128
64
32


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM