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-