d326: 程式設計師的面試問題(二)
Tags : 位元運算子
Accepted rate : 456人/480人 ( 95% ) [非即時]
評分方式:
Tolerant

最近更新 : 2009-06-14 07:45

Content
位元運算常會有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的測資就可以了.
 
 
Input
每行輸入三個有號整數,v, a, b, 用一個空白字元隔開.
v的範圍為-2147483647到2147483647.
a的範圍為0到31.
b不是0就是1.
全部測資以EOF做為結束.
Output
請對每一行測資輸出一行答案轉二進位數,也就是說會有32個整數,其整數不是0就是1.
最左邊為最高位元, 最右邊為最低位元.
請參考範例測資和答案.
Sample Input
0 0 1
1 0 0
2147483647 31 1
-1 31 0
4 0 1
4 0 0
Sample Output
00000000000000000000000000000001
00000000000000000000000000000000
11111111111111111111111111111111
01111111111111111111111111111111
00000000000000000000000000000101
00000000000000000000000000000100
測資資訊:
記憶體限制: 512 MB
公開 測資點#0 (100%): 1.0s , <1K
Hint :
位元運算
Tags:
位元運算子
出處:
某科技公司的面試問題 [管理者:
bleed1979 (Bleed)
]


ID User Problem Subject Hit Post Date
16378
freedom501999@g... (帥氣魔方生)
d326
C的
103 2018-12-26 01:02