C 語言基礎教程

C 語言流程控制

C 語言函數(shù)

C 語言數(shù)組

C 語言指針

C 語言字符串

C 語言結構體

C 語言文件

C 其他

C 語言參考手冊

C 語言按位運算符

在本教程中,您將通過示例了解C語言編程中所有6個按位運算符。

在算術邏輯單元(位于CPU內)中,諸如位加法,減法,乘法和除法之類的數(shù)學運算是在位級別完成的。 要在C編程中執(zhí)行位級運算,請使用按位運算符。

運算符
運算符的含義
&&按位與
|按位或
^按位異或
~按位補
<<左移位
>>右移位

按位與運算符&

如果兩個操作數(shù)的對應位為1,則按位與的輸出為1。如果一個操作數(shù)的任一位為0,則對應位的結果為0。

讓我們假設兩個整數(shù)12和25的按位與運算。

12 = 00001100(二進制)
25 = 00011001(二進制)

12和25的位運算
  00001100
&00011001
  ________
  00001000 = 8(十進制)

范例1:按位與

#include <stdio.h>
int main()
{
    int a = 12, b = 25;
    printf("Output = %d", a&b);
    return 0;
}

輸出結果

Output = 8

按位或運算符|

如果兩個操作數(shù)的至少一個對應位為1,則按位OR的輸出為1。在C編程中,按|表示按位OR運算符。

12 = 00001100(二進制)
25 = 00011001(二進制)

12和25的按位或運算
  00001100
| 00011001
  ________
  00011101 = 29(十進制)

范例2:按位或

#include <stdio.h>
int main()
{
    int a = 12, b = 25;
    printf("Output = %d", a|b);
    return 0;
}

輸出結果

Output = 29

按位XOR(異或)運算符^

如果兩個操作數(shù)的對應位相反,則按位XOR運算符的結果為1。用^表示。

12 = 00001100(二進制)
25 = 00011001(二進制)

12和25的按位XOR運算
  00001100
^ 00011001
  ________
  00010101 = 21(十進制)

例3:按位XOR

#include <stdio.h>
int main()
{
    int a = 12, b = 25;
    printf("Output = %d", a^b);
    return 0;
}

輸出結果

Output = 21

按位補運算符?

按位補運算符是一元運算符(僅在一個操作數(shù)上起作用)。 它將1更改為0,將0更改為1。用~表示。

35 = 00100011(二進制)

35的按位補碼運算
?00100011 
  ________
  11011100 = 220(十進制)

范例4:按位補示例

#include <stdio.h>
int main()
{
    printf("Output = %d\n",~35);
    printf("Output = %d\n",~-12);
    return 0;
}

輸出結果

Output = -36
Output = 11

C語言編程中的移位運算符

C語言編程中有兩個移位運算符:

  • 右移運算符

  • 左移運算符。

右移運算符

右移運算符將所有位向右移位指定數(shù)量的指定位。用>>表示。

212 = 11010100(二進制)
212 >> 2 = 00110101(二進制)[右移兩位]
212 >> 7 = 00000001(二進制)
212 >> 8 = 00000000 
212 >> 0 = 11010100(無移位)

左移運算符

左移運算符將所有位向左移特定數(shù)量的指定位。用<<表示。

212 = 11010100(二進制)
212 << 1 = 110101000(二進制)[左移一位]
212 << 0 = 11010100(移位0)
212 << 4 = 110101000000(二進制)= 3392(十進制)

示例#5:移位運算符

#include <stdio.h>
int main()
{
    int num=212, i;
    for (i=0; i<=2; ++i)
        printf("右移 %d: %d\n", i, num>>i);

     printf("\n");

     for (i=0; i<=2; ++i) 
        printf("左移 %d: %d\n", i, num<<i);    
    
     return 0;
}

輸出結果:

右移 0: 212
右移 1: 106
右移 2: 53

左移 0: 212
左移 1: 424
左移 2: 848
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清