位元運算常會有machine dependant的問題,
直接定義 1 byte = 8 bits, int型態為32 bits.
某甲碰到一個面試問題:
==============================================
輸入三個有號數v, a, b,型態都是int.
v是介於-2147483647到2147483647的整數值.
a是代表這個整數的第a個bit.
b如果是1,表示要將v的第a bit設成1.
b如果是0,表示要將v的第a bit設成0.
這個題目大意就是將v的第a bit設成0或1.
請將程式運算的結果轉成二進位並輸出到螢幕上.
==============================================
某甲很快的build出大略的雛形如下:
#include <stdio.h>
/* set bit b to 1 */
int set_bit(int v, int b)
{
}
/* set bit b to 0 */
int unset_bit(int v, int b)
{
}
/* check_bit b is 1 or 0 */
int check_bit(int v, int a, int b)
{
}
int main(void)
{
int i, v, bit, isSet;
while(scanf("%d %d %d",&v,&bit,&isSet)==3)
{
if(isSet)
v = set_bit(v, bit);
else
v = unset_bit(v, bit);
for(i=31;i>=0;--i)
printf( "%d", check_bit(v, 32, i) );
putchar('\n');
}
return 0;
}
但是他還沒有把function完成.
現在請你完成這個程式,請嚴格要求自己每個function只用一行完成.
也就是每個function只有return 運算;
當然,如果你有更快的做法也可以,只要通過judge的測資就可以了.