首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

容易代码分析!

2013-10-11 
简单代码分析!!#includestdio.hvoid main(){unsigned char resultint a,b,c,da2b4c6d8result

简单代码分析!!
#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);

热点排行