C++位操作符总结

 1 #include <stdio.h>
 2 #include <memory.h>
 3 #include <malloc.h>
 4 #define MaxBinLength 16
 5 
 6 //获取无符号数的二进制,这是我自己写的,更简单的方法可以用bitset代替
 7 char* getUnsignedBinary(unsigned int num)
 8 {
 9     int len = MaxBinLength -1;
10     char *bin = (char*)malloc((MaxBinLength + 1)*sizeof(char));
11     memset(bin,'0',MaxBinLength);
12     bin[MaxBinLength] = 0;
13     while(num/2 != 0){
14         bin[len--] = '0' + num%2;
15         num/=2;
16     }
17     if(num!=0)
18         bin[len--] = '1';
19     return bin;
20 }
21 
22 void flip(unsigned short num)
23 {
24     printf("位求反,运算符为 ~ ,功能简单,将操作数的每一个二进制位取反\n");
25     printf("原值:%6d %s\n",num,getUnsignedBinary(num));
26     printf("新值:%6d %s\n",~num,getUnsignedBinary(~num));
27     printf("-------------------------\n");
28 }
29 
30 void left_shift(unsigned short num,unsigned short offset)
31 {
32     printf("左移运算,运算符为 << ,将操作数的二进制位向左移动指定的offset(%d)位数,offset必须小于原数的位数,右边新加的位以0填充\n",offset);
33     printf("原值:%6d %s\n",num,getUnsignedBinary(num));
34     printf("新值:%6d %s\n",num<<offset,getUnsignedBinary(num<<offset));
35     printf("-------------------------\n");
36 }
37 
38 void right_shift(unsigned short num,unsigned short offset)
39 {
40     printf("右移运算,运算符为 >> ,将操作数的二进制位向右移动指定的offset(%d)位数,offset必须小于原数的位数,\n\
41 如果操作数无符号,左边新加的位以0填充,如果操作数有符号,右边新加的位可能以符号位填充,也可能以0填充,\n\
42 具体依赖于机器,见注释\n",offset);
43     printf("原值:%6d %s\n",num,getUnsignedBinary(num));
44     printf("新值:%6d %s\n",num>>offset,getUnsignedBinary(num>>offset));
45     printf("-------------------------\n");
46 }
47 
48 void weiyu(unsigned short num,unsigned short num_1)
49 {
50     printf("位与,运算符为 & ,对两个操作数的每一个对应二进制位进行'与'运算,运算方式类似于&&运算\n");
51     printf("原值:%6d %s\n",num,getUnsignedBinary(num));
52     printf("原值:%6d %s\n",num_1,getUnsignedBinary(num_1));
53     printf("新值:%6d %s\n",num&num_1,getUnsignedBinary(num&num_1));
54     printf("-------------------------\n");
55 }
56 
57 void weihuo(unsigned short num,unsigned short num_1)
58 {
59     printf("位或,运算符为 | ,对两个操作数的每一个对应二进制位进行'或'运算,运算方式类似于||运算\n");
60     printf("原值:%6d %s\n",num,getUnsignedBinary(num));
61     printf("原值:%6d %s\n",num_1,getUnsignedBinary(num_1));
62     printf("新值:%6d %s\n",num|num_1,getUnsignedBinary(num|num_1));
63     printf("-------------------------\n");
64 }
65 
66 void weiyihuo(unsigned short num,unsigned short num_1)
67 {
68     printf("位异或,运算符为 ^ ,对两个操作数的每一个对应二进制位进行'异或'运算,两个位不同则为1,相同则为0\n");
69     printf("原值:%6d %s\n",num,getUnsignedBinary(num));
70     printf("原值:%6d %s\n",num_1,getUnsignedBinary(num_1));
71     printf("新值:%6d %s\n",num^num_1,getUnsignedBinary(num^num_1));
72     printf("-------------------------\n");
73 }
74 
75 void zhushi()
76 {
77     printf("注释:位操作符只能操作整数,这个整数可以是有符号的也可以是无符号的,\n\
78 如果操作数为负数,则位如何处理其符号位依赖于机器,所以在一个环境中实现的\n\
79 程序可能无法用于另一环境,因此强烈建议使用unsigned整数作为操作数\n\
80 参考<<C++primer>>(人民邮电出版社第4版)155页\n");
81     printf("-------------------------\n");
82 }
83 
84 int main()
85 {
86     unsigned short num = 125,num_1 = 26,offset = 3;
87     flip(num);
88     left_shift(num,offset);
89     right_shift(num,offset);
90     weiyu(num,num_1);
91     weihuo(num,num_1);
92     weiyihuo(num,num_1);
93     zhushi();
94     return 0;
95 }
View Code

相关文章:

  • 2021-06-25
  • 2022-12-23
  • 2021-11-03
  • 2021-09-24
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-12-13
  • 2022-02-15
  • 2021-04-23
  • 2021-07-05
相关资源
相似解决方案