본문 바로가기

TIL/개인공부

공부2

반응형

1. 빅 엔디언 머신 & 리틀 엔디언 머신 구별하는방법, 코드 작성


ex. A45C를 저장할때


빅 엔디언 머신에서는 A4를 첫 번째 바이트로, 5C를 두 번째 바이트로

리틀 엔디언 머신에서는 5C를 첫 번째 바이트로, A4를 두번째 바이트로 저장


즉 2바이트 중에서 첫 번째 바이트가 큰거면-> 리틀, 작은거면-> 빅


/*return 한 값이 1이면 리틀

0이면 빅

*/
bool isLittleEndian(){

int testNum;

char *ptr;


testNum = 1;  //0x0001 or 0x0100

ptr = (char*) &testNum;

return (*ptr);

}



2. 비트에서 1의 갯수를 세는 방법


예로 00001011이라고 할 때:


오른쪽 끝이 1 이면 count ++, 비트에 더하기 1 ==> 비트: 00001100, count = 1

오른쪽 끝이 0 이면 shift ==> 비트 00000011, count = 1


위에 과정 반복:

비트: 00000100, count = 2

비트: 00000001, count = 2

비트: 00000000, count = 3


이렇게 1의 갯수를 셀수가 있음, 밑에 코드(빨간글씨는 처음보는 연산)


int numOnesInBinary(int number){

int numOnes = 0;

while( number != 0){

if( (number & 1 ) == 1){    //끝 비트가 1 인지 아닌지 확인

numOnes ++;

}

number = number >>> 1; //연산하고 1이 나올때까지 shift해줌

}

return numOnes;

}


반응형