1按位與置0、按位或置1,按位異或取反
#include<stdio.h>voidprintBinary(unsigneda){printf(" %10u%X",a,a);for(inti=31;i>=0;i--){if((i+1)%4==0)printf("");if((a>>i&1)==1)printf("1");elseprintf("0");}}voidtest(){unsigneddata=0x12345678;//305419896//dec//00010010001101000101011001111000//binaryprintBinary(data);printf("原數據 ");unsignedmask=0xFFFF0000;printBinary(mask);printf("掩碼 ");unsigneda=data&mask;printBinary(a);printf("按位與&,后16位置0 ");unsignedb=data|mask;printBinary(b);printf("按位或|,前16位置1 ");unsignedc=data^mask;printBinary(c);printf("按位異或^,前16位取反 ");}intmain(){test();getchar();return0;}/*3054198961234567800010010001101000101011001111000原數據4294901760FFFF000011111111111111110000000000000000掩碼3053977601234000000010010001101000000000000000000按位與&,后16位置04294923896FFFF567811111111111111110101011001111000按位或|,前16位置13989526136EDCB567811101101110010110101011001111000按位異或^,前16位取反*/2按位運算與算術運算2.1二進制無進位加法
按位異域
0
0
1
1
^
0
1
0
1
0
1
1
0
2.2二進制加法的進位
按位與
0
0
1
1
&
0
1
0
1
0
0
0
1
2.3整型乘除
2.3.1整型與一個2的某次冪相乘
用移位實現乘除法運算
a=a<<3;//a=a*(2^3);
b=b>>3;//b=b/(2^3);
2.3.2整型與一個非2的某次冪相乘
a=a<<3+a;//a=a*9→a=a*(a^3+1)
3整型按位乘法
移位相加實現二進制乘法:
移位、相加:
10110011*1101//179*13
=179<<0*1+179<<1*0+179<<2*1+179<<3*1
=0000000000000000100100010111//2327
4整型按位除法
2進制完成除法運算就是移位相減,比如1011011除以1110(91/14)順序如下:
被除數
1
0
1
1
0
1
1
除數左對齊
1
1
1
0
除數對齊到小于被除數的位置
被除數
1
0
1
1
0
1
1
1
1
1
0
商
1
0
0
余數
1
0
0
0
1
1
余數繼續相除:
被除數
1
0
1
1
0
1
1
除數
1
1
1
0
商
1
0
0
余數
1
0
0
0
1
1
除數
1
1
1
0
商
1
1
0
余數
1
1
1
1011011/1110=110+111//91/14=6+7
1011011=1110*0000110+111//91=14*6+7
-End-