공부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;
}