2.1 정보의 저장
2.1.1 16진수 표시
2진수를 16진수로 바꿀 때, 4비트씩 쪼개서 변환하면 편하다.
“숫자 to hex"를 검색하면 헥스값을 바로 보여준다.
2.1.2 데이터의 크기
2.1.3 주소지정과 바이트 순서
어떤 객체를 나타내는 바이트를 정렬하는 데는 두 가지 관습이 있다. Little endian과 Big endian.
Big endian은 most significant bit를 가장 먼저 저장한다. Little endian은 그 반대다.
값 0x01234567이 주소상에 있다고 가정하면 둘은 각각 아래와 같이 저장된다.
(<\- 낮은 주소, 높은 주소 ->)
Big endian: 0x01 0x23 0x45 0x67
Little endian: 0x67 0x45 0x23 0x01
네트워크는 바이트 순서가 표준으로 정해졌다. 그러므로 통신할 때는 이에 맞춰 바이트 순서를 조정할 필요가 있다.
2.1.4 스트링 표시
2.1.5 코드의 표현
같은 소스코드여도 바이너리는 얼마든지 다를 수 있다.
2.1.6 부울 대수
2.1.7 C에서의 비트수준 연산
비트수준 연산은 일반적으로 마스크 연산을 구현할 때 사용한다.
2.1.8 C에서의 쉬프트 연산
c언어에서 x >> k
연산은 두가지 종류가 있다.
논리 우측 쉬프트는 좌측 끝을 k개의 0으로 채운다.
산술 우측 쉬프트는 좌측 끝을 most significant bit를 k개 반복해서 채운다.
C 표준은 부호형 숫자에 대해서 어떤 타입의 우측 쉬프트를 사용해야 하는지 명확하게 정의하지 않았다.
대부분의 컴파일러는 부호형 숫자에 대해서 산술 우측 쉬프트를 사용한다.
비부호형 데이터에 대해서는 논리 우측 쉬프트를 사용해야 한다.
담내용은 담날에
출처
‘Computer Systems A Programmer’s Perspective (3rd Edition)’