보안_기타

진법, 비트와 바이트, 바이트 오더링 , 빅 엔디안 , 리틀 엔디안

정지홍 2024. 7. 27. 08:56

진법

  • 10진수 decimal  ->  0~9로 표현
  • 2진수 binary -> 0,1로 표현
  • 16진수 hexa decimal -> 0~9 , A~F 로 표현 ( 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)이 순서로 총 16개
    • 예시) 16진수 41존재하고 이를 10진수로 변환해보자 =>  (4*16^1) + (1*16^0) = 64+1 = 65이며 만약 이를 출력하고자 한다면 아스키코드 65값인 A가 출력됨
2진수 0 0 1 1 1 1 0 0
16진수 3 C
10진수 60

 


 

비트와 바이트

  • 1bit  => 2가지의 경우의 수 표현
  • 1byte ( 8bit ) => 2^8이며 즉 256가지의 경우의 수 표현 => 메모리에 저장되는 최소 단위임. => deciaml로는 0~255이며 binary로는 00,000,000~11,111,111이며 dexa deciamal로는 00~FF이다.

최상위 비트 MSB ( most significant bit ) : 가장 왼쪽에 있는 비트

최하위 비트 LSB ( least significant bit ) : 가장 오른쪽에 있는 비트

1 1 1 1 0 0 0 0
MSB   LSB

 

if (부호가 있는 데이터)  =>   MSB는 부호의 의미를 가짐 => 0이면 양수 , 1이면 음수

부호가 있는 데이터 = signed data

부호가 x 데이터 => unsigned data

 

10,010,100이 signed data이면 (-128+16+4) = -108

10,010,100이 unsigned data이면 (128+16+4) = 148

 


 

바이트 오더링

  • 2 byte이상 데이터는 메모리에 연속적으로 저장되며 이때 각 byte가 메모리에 저장 되는 방식을 의미
  • 문자열은 메모리에 저장할때 바이트 오더링을 고려하지 않는다. 즉, 문자 순서 그대로 저장된다.
  • 문자열은 일반적으로 각 문자가 독립적인 바이트 단위로 저장되기 때문에 바이트 오더링의 영향을 받지 않음
  • 빅 엔디안과 리틀 엔디안으로 나뉨. 
    • Big Endian : 큰 byte먼저 낮은 주소에 저장 ( 첫번째 표). 주로 네트워크 상 or SPARC CPU
    • Little Endian : 작은 byte먼저 낮은 주소에 저장 ( 두번째 표).. 주로 x86 , x86-64 CPU. 즉, 대다수 컴퓨터에서 해당 방식 사용
Memory Addr 0x100 0x101 0x102 0x103
hexa deciamal 0x11 0x23 0x45 0x67
binary 0001 0001 0010 0011 0100 0101  0110 0111
Memory Addr 0x100 0x101 0x102 0x103
hexa decimal 0x67 0x55 0x32 0x10
binary 0110 0111 0101 0101 0011 0010 0001 0000

 


AGDB는 0x41 0x47 0x44 0x42 로 저장됨. 아래 예시는 각각의 독립된 공간에 저장됨울 보여줌

 

  • 0x555555556004: 0x41 ('A')
  • 0x555555556005: 0x47 ('G')
  • 0x555555556006: 0x44 ('D')
  • 0x555555556007: 0x42 ('B')

리틀 엔디안 예시

  • 0x7fffffffe317: 0x44  (가장 높은 바이트)
  • 0x7fffffffe316: 0x43
  • 0x7fffffffe315: 0x42
  • 0x7fffffffe314: 0x41  (가장 낮은 바이트)
  • 리틀 엔디안 해석: 0x44434241

빅 엔디안 예시

  • 0x7fffffffe314: 0x44  (가장 높은 바이트)
  • 0x7fffffffe315: 0x43
  • 0x7fffffffe316: 0x42
  • 0x7fffffffe317: 0x41  (가장 낮은 바이트)
  • 빅 엔디안 해석: 0x44434241