1000100B - 1과 같은 이진수 표기법

"안녕, 아미고!"

"안녕, 빌라보!"

"다양한 번호 매기기 시스템에 대해 조금 말씀드리고 싶습니다."

"당신은 이미 사람들이 십진법을 사용한다는 것을 들었습니다. 이 체계의 주요 사실은 다음과 같습니다.

1) 0  , 1, 2, 3, 4, 5, 6, 7, 8, 9의 10자리 숫자를 사용합니다.

2)  숫자 543은 5백+4십+3일을 의미합니다.

"이것은 5*100 + 4*10 + 3*1을 쓰는 것과 같고, 5*10 2 + 4*10 1 + 3*10 0 으로 쓸 수 있습니다 .

천, 백, 십, 일이 숫자 10의 거듭제곱이라는 점에 유의하십시오.

1) 1은 10의 0승입니다.

2)  10은 10의 1승입니다.

3) 100은 10의 2승입니다.

4)  1천은 10의 3제곱 등입니다.

"예. 알겠습니다."

"하지만 이제 숫자가 8개뿐이라고 상상해 보세요. 그러면 8진법이 있습니다. 주요 사실은 다음과 같습니다."

1)  0, 1, 2, 3, 4, 5, 6, 7의 8자리 숫자를 사용합니다.

2)  숫자 543 8 은 5*8 2 +4*8 1 +3*8 0 을 의미합니다 . 즉, 5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10

8과 10을 아래 첨자로 써서 숫자를 나타내는 데 몇 개의 숫자가 사용되는지 표시했습니다.

"이해한 것 같아요. 숫자를 8진수 체계에서 10진법으로 변환할 수 있을 것 같아요. 하지만 아마 다른 방법으로는 갈 수 없었을 겁니다."

"그리 어렵지 않습니다. 모래더미를 옮기기 위해 여러 대의 트럭을 사용해야 한다고 상상해 보세요. 덤프트럭, 일반 트럭, 아주 작은 트럭이 있습니다. 하지만 트럭은 가득 차 있지 않으면 갈 수 없습니다."

"어떻게 하시겠습니까?"

"처음에는 덤프트럭이 가장 컸기 때문에 덤프트럭을 채웠습니다. 그런 다음 트럭을 채울 모래가 충분하지 않다는 것을 알았을 때 더 작은 차량으로 바꿨습니다. 그런 다음 더 작은 차량으로 바꿨습니다."

"실제로 여기도 매우 비슷합니다. 숫자 355 10을 다시 8진수로 변환해 봅시다 ."

"먼저 64(8 ​​2 ) 로 나누고 나머지 35로 5를 얻습니다. 이것은 숫자의 첫 번째 숫자가 5라는 것을 의미합니다. 그런 다음 나머지를 8(8 1 )로 나누고 나머지로 4를 얻습니다. 따라서 우리는 543 8 이라는 숫자를 얻습니다 ."

"그런데 다른 방향으로도 이동할 수 있습니다. 결국 543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3. 우리의 8진수 "십 " 및 "백"은 8로 나누어야 합니다. 따라서 8로 나눈 나머지는 8진수가 됩니다."

"먼저 355를 8로 나누자. 나머지가 3인 44가 나온다. 즉, 355=44*8+3이다. 그리고 44는 5*8+4로 나타낼 수 있다. 따라서 355= (5*8+ 4)*8+3; 여기에 숫자가 있습니다: 5, 4, 3. 우리가 찾고 있는 숫자는 543 8 입니다 ."

"이해한 것 같지만 모든 것을 이해하려면 약간의 연습이 필요합니다."

"프로그래밍은 종종 다른 기준(예: 번호 매기기 시스템에서 사용되는 자릿수)을 가진 숫자를 사용하는 것과 관련됩니다. 가장 인기 있는 것은 2, 8, 10, 16 및 64입니다."

"그런데 이게 왜 필요한 거죠? 왜 2, 8, 16, 64자리로 표현되는 숫자가 필요한 거죠?"

"프로세서가 내부적으로 작동하는 방식에 관한 것입니다. 매우 간단하게 말해서 전류가 와이어를 통해 흐르면 그 값은 1이고 전류가 없으면 그 값은 0입니다. 모든 숫자는 메모리 셀에 저장됩니다. 이러한 세포는 매우 기본적인 디자인을 가지고 있습니다. 그리고 그들은 0 또는 1만 저장할 수 있습니다."

"그러나 이러한 단순화(0 또는 1만 가능)로 인해 프로세서 및 메모리 내부의 요소를 매우 작게 만들 수 있었습니다. 최신 프로세서 및 메모리 모듈에는 수십억 개의 서로 다른 요소가 포함되어 있으며 그 면적은 종종 1제곱 센티미터를 넘지 않습니다."

"워. 이제 알겠어."

"이제 우리는 이진수로 전환합니다. 여기서 우리는 8진수와 동일하지만 더 쉽습니다."

1)  숫자를 쓰는 데 2자리가 사용됩니다: 0, 1.

2)  숫자 101 2 는 1*2 2 + 0*2 1 + 1*2 0 을 의미합니다 . 즉, 1*4+0*2+1*1 =4+1=51 10

"예. 기억합니다. 0 또는 1의 값을 가질 수 있는 하나의 셀을 비트라고 합니다. 하지만 많은 정보를 저장할 수 없기 때문에 8개의 그룹으로 결합됩니다. 이러한 그룹을 바이트라고 합니다. "

"맞습니다. 바이트는 8비트의 그룹입니다. 다음 값을 저장할 수 있습니다: 00000000, 00000001, ... 11111111. 이 값은 10진수 0,1, ... 255에 해당합니다. 총계는 256 값."

Java에서 가장 큰 정수는 무엇입니까? 아니면 그 유형이 무엇입니까?

"A long. A long은 8바이트로 구성됩니다. 즉, 64비트입니다. -2 63 에서 2 63 -1 까지 의 값을 저장할 수 있습니다 .

"예. 숫자를 10진수에서 2진수로 또는 그 반대로 변환하는 방법은 다루지 않겠습니다. 그렇지 않으면 수업이 너무 길어질 것입니다."

"대신 16진수 체계에 대해 조금 더 이야기해 봅시다."

"예, 매우 흥미롭습니다. 2진수 및 8진수 시스템의 경우 각각 2와 8로 시작하는 숫자를 간단히 제거했습니다. 하지만 여기서 무엇을 해야 합니까? 새 숫자를 추가할까요?"

"맞아요! 이것 좀 보세요:"

1) 숫자를 쓰는 데 사용되는 16자리: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

2) 숫자 543 16 은 5*16 2 + 4*16 1 + 3*16 0 을 의미합니다 . 즉, 5*256+4*16+3*1 = 1280+64+3 = 1347 10

"그래서 문자를 숫자로 추가한 것 뿐이야? O_o"

"그래. 그리고 중요한 게 뭐야? 문자가 완벽하게 작동하는데 왜 새로운 숫자를 발명해? 확인해봐:"

16진수 소수점
0 0
1 1
8 8
9 9
10
11
12
13
이자형 14
에프 15

"10진수에서 16진수로 변환하는 것에 대해서도 이야기하지 않겠습니다. 그러나 여기에 한 가지 흥미로운 사실이 있습니다. 16진수는 0에서 15까지의 값을 가진 정확히 4비트로 표현됩니다. 따라서 1바이트는 8개의 이진수로 쓰여질 수 있습니다. (0 또는 1) 또는 두 개의 16진수입니다."

"다음은 예입니다."

십진수 이진수 16진수
0 0000 0000 00
1 0000 0001 01
15 0000 1111 0f
16 0001 0000 10
31 0001 1111 1층
32 0010 0000 20
128 1000 0000 80
129 1000 0001 81
255 1111 1111 ff

"16진수 표현은 2진수로 쉽게 변환되며 그 반대도 마찬가지입니다. 프로그래밍에서 숫자의 내부 바이트 표현이 2진수(0과 1 사용)로 거의 제공되지 않는 이유입니다. 너무 길고 이해하기 어려울 것입니다. 16진수 표기법 훨씬 더 읽기 쉽고 간결합니다."

"동의한다. 나도 좋았다."

"그런데 Java를 사용하면 코드에서 직접 다양한 번호 체계로 숫자를 작성할 수 있습니다."

베이스 구별 기능 잘못된 숫자
2  숫자의 시작 부분에 0b 0b 00001111 0b 11111 2 1
8  숫자의 시작 부분에 0 0 1234343 0 12 8
10 없음 95459 909 _
16  숫자의 시작 부분에 0x 0x 10ff 0x 1c gh

"훌륭한 수업입니다. 감사합니다, Bilaabo."