标签:
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 }
标签:
原文地址:http://www.cnblogs.com/tangxin-blog/p/4804869.html