2014-02-07 2 views
0

well 부호없는 short의 비트가 설정되어 있는지 여부를 확인하십시오. 그래서 x의 비트 i가 설정되면 1을, 그렇지 않으면 0을 반환합니다. 또한 비트가 오른쪽에서 0으로 번호 매겨 졌음을 기억해야합니다 : b15b14b13 ... b3b2b1b0. 글쎄, 그런 식으로 시도했지만 작동하지 않는다고 생각합니다 ... 어떤 도움을 주시면 감사하겠습니다.부호없는 short의 비트가 설정되어 있는지 여부를 확인하십시오.

+2

왜 솔루션이 올바르지 않다고 생각하십니까? – crockeea

+0

이 기능을 어떻게 확인할 수 있습니까?! @Eric – Manuel

+1

@Manuel 당신의 대답은 맞습니다. – BlackMamba

답변

1
short is_set(unsigned short x, int bit) { 

    return ((1 << bit) & x); 
} 

발터는 잘 솔루션이 올바르지 것이 아니라, 왜 당신이 그것을 실패 사례를 게시해야 작동하지 않는 답변을 보인다. @Eric 및 @MadHatter에 의해 제안

short is_set(unsigned short x, int bit) {  
    return (!!((1u << bit) & x)); 
} 
+1

이 버전은 어떤 점에서 다릅니 까? – Gabe

+0

@ Gabe So 5 + 3은 6 + 2와 동일합니다. –

+0

............ @ valter – Manuel

0

short is_set(unsigned short x, int bit) { 
return (x >> bit) & 1; 

} 
+0

이것은 OP의 "x의 비트 1이 반환 될 경우 1을 반환하고 그렇지 않으면 0을"충족하지 않습니다. – chux

+0

@chux : 수정했습니다! –

+0

무엇이 !! 해야 할 것? – Marichyasana

0

는 테스트 케이스를 만들기 : 다음이 방법을 시도하고 관찰을 공유까지

void Test(short x, int i, int expect) { 
    printf("Expect %d, is_set(%#x,%d) --> ", expect, x,i); 
    fflush(stdout); // Flush output as is_set() may fail. 
    int result = is_set(x,i); 
    printf(" %d, %s\n", result, expect == result ? "Success" : "Fail"); 
} 

void Tests(void) { 
    Test(0x0000, 0, 0); 
    Test(0x0001, 0, 1); 
    Test(0x1234, 2, 1); 
    Test(0x1234, 3, 0); 
    // etc. 
} 
Expect 0, is_set(0,0) --> 0, Success 
Expect 1, is_set(0x1,0) --> 1, Success 
Expect 1, is_set(0x1234,2) --> 1, Success 
Expect 0, is_set(0x1234,3) --> 0, Success 

이 기능은 제대로 "반환을 수행 1이면 x의 비트 i가 설정되고 그렇지 않으면 0이됩니다.

사소한 : 요구 사항의 코드 이름과 일치하십시오.

// Return 1 iff bit i in x is set, 0 otherwise 
//         v 
short is_set(unsigned short x, int i) { 

마이너 : 반환 값은 별도로 명시하지 않는 한이 int을 의미한다 1이며, 0.

int is_set(unsigned short x, int i) { 
관련 문제