读书人

容易代码分析!

发布时间: 2013-10-11 14:52:39 作者: rapoo

简单代码分析!!
#include<stdio.h>
void main()
{
unsigned char result;
int a,b,c,d;
a=2;
b=4;
c=6;
d=8;

result=a & c;
printf("result= %d\n",result);
result= b | d;
printf("result= %d\n",result);
result =a ^ d;
printf("result= %d\n",result);
result = ~a;
printf("result= %d\n",result);

}
运行结果:result =2;
result =12;
result =10;
result =253;
请大神指点,菜鸟关于位运算的知识很薄弱,运行结果让我很费解,请求简单的解释~~~
[解决办法]
转化成二进制,各个位进行运算就好了!拿画画就知道了
http://www.cnblogs.com/911/archive/2008/05/20/1203477.html
参考
[解决办法]
intunsigned char
a 2 00000000 00000000 0000000 00000010
b 4 00000000 00000000 0000000 00000100
c 6 00000000 00000000 0000000 00000110
d 8 00000000 00000000 0000000 00001000

a & c 00000000 00000000 00000000 00000010 00000010 =2^1 = 2
b
[解决办法]
d 00000000 00000000 00000000 00001100 00001100 =2^3+2^2=12
a ^ d 00000000 00000000 00000000 0000101000001010 =2^3+2^1=10
~a 11111111 11111111 11111111 1111110111111101 =(2^8-1)-2^1=253
[解决办法]
~a 11111111 11111111 11111111 1111111111111101 =(2^8-1)-2^1=253
[解决办法]
unsigned char result;
int a,b,c,d;
a=2; 0000 0010
b=4; 0000 0100
c=6; 0000 0110
d=8; 0000 1000

result=a & c; //按位与,1和1为1,其余都为0. 因此,a&c的结果就是0000 0010 也就是十进制的2了。
printf("result= %d\n",result);
result= b
[解决办法]
d; //按位或,0和0为0,其余都为1. 因此,b
[解决办法]
d的结果就是0000 1100 也就是12了。
printf("result= %d\n",result);
result =a ^ d;//按位异或,某个二进制位和0异或结果不变,某个二进制位和1异或取相反数.因此 a^d的结果就是,0000 1010,也就是十进制的10了。
printf("result= %d\n",result);
result = ~a; //按位取反,取每个二进制位的相反数。1111 1101 也就是253.
printf("result= %d\n",result);

读书人网 >C语言

热点推荐