码迷,mamicode.com
首页 > 编程语言 > 详细

C++位操作符总结

时间:2015-09-13 14:22:52      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

技术分享
 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填充,\n42 具体依赖于机器,见注释\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 如果操作数为负数,则位如何处理其符号位依赖于机器,所以在一个环境中实现的\n79 程序可能无法用于另一环境,因此强烈建议使用unsigned整数作为操作数\n80 参考<<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

 

C++位操作符总结

标签:

原文地址:http://www.cnblogs.com/tangxin-blog/p/4804869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!