#include <stdio.h>
int main()
{
int t = 7544;
int u = 432987;
int n = 2;
int m;
// version 1
while (t)
{
t >>= 1;
n <<= 1;
}
// version 2
for (m=2; u>>=1; m<<=1) ;
printf("%d %d\n", n, m);
return 0;
}
vim에 있는 TOhtml 기능 한번 써볼랬는데 흰 바탕이라 그런지 영 안이쁘네요... ㅠ
다만 입력값이 0인 경우엔 따로 처리해줘야 할거에요.
일단 질문에 물어보신건 16진수인데요...
일단 질문에 물어보신건 16진수인데요...
피할 수 있을때 즐겨라! http://melotopia.net/b
아~ 표시를 16진수로 했습니다. 2진수로 하면 너무
아~ 표시를 16진수로 했습니다. 2진수로 하면 너무 길어서~ ㅎ
간!단!히! 하는 방법은 어셈블리 비트연산을 바로
간!단!히! 하는 방법은 어셈블리 비트연산을 바로 하는 방법 밖에 모르겠네요.
C로 하면 대충
ceil = 1;
while (n != 0) {
n &= n-1;
ceil <<= 1;
}
이렇게 되지 않을까 싶은데, 진짜 돌아가는지는 확인해보세요.
막 돌려보니까 코드가 틀렸네요. 뻘쭘...
막 돌려보니까 코드가 틀렸네요. 뻘쭘...
답변 감사합니다. ^^
답변 감사합니다. ^^
1 #include <stdio.h> 2 3
vim에 있는 TOhtml 기능 한번 써볼랬는데 흰 바탕이라 그런지 영 안이쁘네요... ㅠ
다만 입력값이 0인 경우엔 따로 처리해줘야 할거에요.
답변 감사합니다. ^^
답변 감사합니다. ^^
답변 달아주셔서 감사합니다. 위 부분을
답변 달아주셔서 감사합니다.
위 부분을 system-c로 구현하여 logic으로 설계하려 합니다.
그래서 "loop를 사용 안하고 하는 방법이 혹시(?) 있지 않을까?" 하여 문의드렸습니다.
없을까요? ㅎ~
다시한번 답변 감사합니다.
system-c에 적합한지는 제가 잘
system-c에 적합한지는 제가 잘 모르겠습니다만,
loop를 사용안하시려면,
음..결국 0x2000이럴때만 아니면 최대비트보다 한비트 올리면 되니까..
if ((n&(n-1)) != 0)
n = 1 << (int)(log2(n));
로 하면 가능하지 않을까요?
log2에 오차에 따라 조금 결과가 달라질 수도 있겠네요..ㅠ.ㅠ
-------------------------
최선을 생각합니다.
답변 감사합니다. log를 써야 하네요. ㅎ~
답변 감사합니다. log를 써야 하네요. ㅎ~
아... 그러네요. 올릴 필요가 없는 경우를 따로
아... 그러네요. 올릴 필요가 없는 경우를 따로 생각했어야 하는데...
http://stackoverflow.com/ques
http://stackoverflow.com/questions/53161/find-the-highest-order-bit-in-c
조금 다르지만 비슷하게 응용 가능하겠습니다..
댓글 달기