給定一個整型變量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/