给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。
答案见《程序员面试宝典》第三版P158例10
一些人喜欢为设置和清除值而定义一个掩码(待操作位全1,其余位全0的数,对于某个意义靠多位同时表示的最好带上掩码,隔离其他位的影响)同时定义一些说明常数,这也是可以接受的。
我希望看到几个要点:说明常数、|=和&=~操作,先取反再&是对某位清0的最好操作。
考点:
在嵌入式系统中,时刻要关注移植性,具体的程序中不要出现具体的数字,这些数字都应该define成某个有意义的符号,可读性可移植性都很强,比如
#define BIT(x) (0x1 << (x))
X作为参数可以很方便的对任意位进行操作,意义明确,更改替换方便.
1.编写一个C语言函数,该函数给出一个字节中被置1的位的个数。
方法1:
#include <stdio.h>
#define Bit(i) (0x01<<i)
int Test(char log)
{
int num=0;
int i;
char val;
for (i=0;i<8;i++)
{
val=log & Bit(i);
if(val)
{num++;}
}
return num;
}
void main()
{
int num1;
num1=Test(15);
printf ("%d\n",num1);
}
方法2:
#include <stdio.h>
#define Bit(i) (0x01<<i)
int Test(char log)
{
int num=0;
int i;
char val;
for (i=0;i<8;i++)
{
val=log >>i;
val&=0x01;//val=val&0x01;
if(val)
{num++;}
}
return num;
}
void main()
{
int num1;
num1=Test(15);
printf ("%d\n",num1);
}
原文地址:http://blog.163.com/sunshine_linting/blog/static/4489332320119783751913/