C語言中位運算子共有六種
目錄
1.&(按位與)
2. |(按位或)
3.^(按位抑或)
4.~(按位取反)
5.<<(左移)
6. >>(右移)
#include<stdio.h>
int main(void)
{
int a=3,b=5,c;
c=a&b;
printf("%d",c); //結果c=1
return 0;
上面使用 按位與& 的一段程式運行結果為c=1
我們用二進制來分析一下它的計算規則,
a=3 二進制為 0000 0011
b=5 二進制為 0000 0101
a&b 的意思就是01演算法,通俗來講a和b的第八位都為1,所以第8位&后的結果為1,前面7位&后的結果都為0
按位計算結果是0000 0001
所以最終c=a&b的結果為c=1
(1)清零
#include<stdio.h>
int main(void)
{
int a=3,b=0,c;
c=a&b;
printf("%d",c); //結果c=0
return 0;
a=3 二進制為 0000 0011
b=0 二進制為 0000 0000
a&b 8個位的運算結果都為0
所以最終c=0
(2) 取某些指定位
假定a=5,二進制為0000 0011
我們要取a的第3黑第6位
只需計算
0000 0101和1111 1111的結果
可得 c的二進制為0000 0101
所以a的第3位為0,第6位為1
(3)保位
例如計算a&b要保a的哪一位,只需將b中對應的位設為1,其余的位設為0.即可實作a的保位
2. |(按位或)用于對一個資料的某些位定值為1
對應位之間按位或的計算 即 0 | 0= 0 , 1 | 0= 1 , 0 | 1= 1 , 1 | 1= 1
( | 的計算原理)
#include<stdio.h>
int main(void)
{
int a=3,b=5,c;
c=a|b;
printf("%d",c); //c的結果=7
return 0;
c=a|b
a=3 二進制為 0000 0011
b=5 二進制為 0000 0101
計算結果為0000 0111 即c=7
3.^(按位抑或)
(計算原理)
對應位置見的抑或運算,相同為0,相異為1
即 0 ^ 0=0 , 0 ^ 1= 1 , 1 ^ 0= 1 , 1 ^ 1= 0 ,
#include<stdio.h>
int main(void)
{
int a=3,b=5,c;
c=a^b;
printf("%d",c);//c的結果為6
return 0;
c=a^b
a=3 二進制為 0000 0011
b=5 二進制為 0000 0101
計算結果為0000 0110 即c=6
4.~(按位取反)
#include<stdio.h>
int main(void)
{
int b=5,c;
c=~b;
printf("%d",c);//c的結果為-6
return 0;
b=5 b的二進制為0000 0101
~b為1111 1010,用十進制表示即為-6,
5.<<(左移)
#include<stdio.h>
int main(void)
{
int b=5,c,d;
c=b<<1;
d=b<<3;
printf("c=%d d=%d",c,d);//最終結果c=10,d=40
return 0;
b<<左移n個單位即b乘以2^n
6. >>(右移)
#include<stdio.h>
int main(void)
{
int b=40,c,d;
c=b>>1;
d=b>>3;
printf("c=%d d=%d",c,d);//結果為c=20,d=5
return 0;
b<<左移n個單位即b除以2^n
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/304294.html
標籤:其他
