d326. 程式設計師的面試問題(二)
標籤 : 位元運算子
通過比率 : 816人/856人 ( 95% ) [非即時]
評分方式:
Tolerant

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

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

本題狀況 本題討論 排行

編號 身分 題目 主題 人氣 發表日期
16378 freedom50199 ... (帥氣魔方生) d326
1516 2018-12-26 01:02