1 按位与置0、按位或置1,按位异或取反

#include <stdio.h> void printBinary(unsigned a) { printf("\nu %X ",a,a); for(int i=31;i>=0;i--) { if((i 1)%4 == 0) printf(" "); if((a>>i & 1) == 1) printf("1"); else printf("0"); } } void test() { unsigned data = 0x12345678; // 305419896 // dec // 0001 0010 0011 0100 0101 0110 0111 1000 // Binary printBinary(data); printf(" 原数据\n"); unsigned mask = 0xFFFF0000; printBinary(mask); printf(" 掩码\n"); unsigned a = data & mask; printBinary(a); printf(" 按位与&,后16位置0\n"); unsigned b = data | mask; printBinary(b); printf(" 按位或|,前16位置1\n"); unsigned c = data ^ mask; printBinary(c); printf(" 按位异或^,前16位取反\n"); } int main() { test(); getchar(); return 0; } /* 305419896 12345678 0001 0010 0011 0100 0101 0110 0111 1000 原数据 4294901760 FFFF0000 1111 1111 1111 1111 0000 0000 0000 0000 掩码 305397760 12340000 0001 0010 0011 0100 0000 0000 0000 0000 按位与&,后16位置0 4294923896 FFFF5678 1111 1111 1111 1111 0101 0110 0111 1000 按位或|,前16位置1 3989526136 EDCB5678 1110 1101 1100 1011 0101 0110 0111 1000 按位异或^,前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 整型按位乘法

移位相加实现二进制乘法:

c语言实现100位的数加减运算 位运算模拟算术运算及某些位置0(1)

移位、相加:

c语言实现100位的数加减运算 位运算模拟算术运算及某些位置0(2)

10110011*1101 // 179*13

= 179<<0*1 179<<1*0 179<<2*1 179<<3*1

= 0000 0000 0000 0000 1001 0001 0111 //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-

,