关于C语言位运算的有关问题,本人新手
关于C语言位运算的问题,本人新手
以下是代码
#include <stdio.h>
#include <conio.h>
main()
{int a,b=255,c;
printf("input data a:");
scanf("%d",&a);
c=a&b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
getch();}
以上代码教程里说是用来为数据的高8位清零用的,现输入A值的为365,此时A的二进制代码是00000001 01101101 ,B的二进制代码为00000000 11111111,数据在内存中都是以二进制的形式存储的,如果数据A的高8位都清零的话,那输出的时候A的值不应该再是那个365,可实际并非如此,我不知道我哪里理解出了问题,郁闷了很久,特来此向诸位高手请教,到底位运算是怎么一回事呢?
------解决方案--------------------
c=a&b;
高八位清零的结果存入 c 中了
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
应该是a&=b;就ok了
------解决方案--------------------
位运算不影响操作数本身的……
话说C/C++里能影响操作数本身的运算只有自增、自减和赋值。
以下是代码
#include <stdio.h>
#include <conio.h>
main()
{int a,b=255,c;
printf("input data a:");
scanf("%d",&a);
c=a&b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
getch();}
以上代码教程里说是用来为数据的高8位清零用的,现输入A值的为365,此时A的二进制代码是00000001 01101101 ,B的二进制代码为00000000 11111111,数据在内存中都是以二进制的形式存储的,如果数据A的高8位都清零的话,那输出的时候A的值不应该再是那个365,可实际并非如此,我不知道我哪里理解出了问题,郁闷了很久,特来此向诸位高手请教,到底位运算是怎么一回事呢?
------解决方案--------------------
c=a&b;
高八位清零的结果存入 c 中了
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
应该是a&=b;就ok了
------解决方案--------------------
位运算不影响操作数本身的……
话说C/C++里能影响操作数本身的运算只有自增、自减和赋值。