1
2
3
forceinline bool isPowerOf2(uint32_t n){
return(n&(n-1))==0;
}
cs


 isPowerOf2은 2의 제곱인지 확인 하는 것이다.


 여기서 본다면, n이 2의 제곱인가에 대해서 확인하는 함수이다.


 이걸 이해하기위해서는 2의 진법에 대해서 알고 있으면 아주 쉽게 표현이 가능하다.


 컴퓨터는 전기로 흐르는 장치이다. 그래서 2의 진법으로 컴퓨터의 숫자가 표현이 된다. 이걸 이용해서 2의 제곱인지를 확인 할 수 있다.


 예을 들어서 2라고 한다면, 10(2)라는 이진수가 표현이 된다.


 여기서 10(2) and 01(2)이 된다면, 동일한 숫자가 없기 때문에, 0이 된다.


 반대로 3인 11(2) and 10(2)가 되면, 1이 나오기 때문에, 0이 되지 않는다.


 동일하게 4와 5을 해보면,


 4일때,

 100(2) and 011(2) 가 되서, 0이 되지만,


 5일때,

 101(2) and 100(2) 가 되서, 0이 되지 않는다.


 이걸 이용해서 3의 제곱이나 그런게 되는지 확인해봤지만, 제대로 되지 않았다.


 4, 8, 16등은 전부다 2의 제곱들이기 때문에, 저 소스로 제곱으로 확인을 할 수 있다는건 알 수 있을 것이다.


 

1
2
3
4
5
forceinline uint bitSize(uint Value){
uint Total=0;
for(;Value;Value>>=1,Total++);
return Total;
}
cs


 이것은 bit크기를 확인하는 함수이다.


 보면, Total은 result이다.


 컴퓨터는 0이면 거짓, 0이외의 값을 가진다면 참으로 처리한다. 그래서 for문에서 조건부분이 들어가는 곳에서 Value만 들어가 있는 것이다.


 그리고 반복에서 Value>>=1은 다시 풀어 적으면, Value = Value >> 1이라는 것으로 우측으로 1bit씩 이동시키는 것이다.


 Total은 그 bit의 갯수를 기록하기 위한 것이고 말이다.


 아직 실력이 부족해서 그런지 완벽하게 분석하는데 시간이 걸리는 것 같다.

 조금 시간을 들여서 더 자세하게 기록을 해야 겠다.

Posted by JunkMam
,