2 ^ 16이 왜“특별한”숫자입니까? [닫은]


48

좋아, 나는 이것을 묻는 바보 같은 느낌이 든다. 그러나 Jeff의 기사 : 인터뷰 전화 화면을 올바르게 얻으려면 원래 5 가지 필수 전화 화면 질문에 나와있다 .

당신이 2 ^ 16와 함께 물어볼 때 그들은 당신을 멍하게 쳐다 보지 않아야합니다. 특별한 숫자입니다. 그들은 그것을 알아야합니다.

나는 잠시 동안 개발자 / 소프트웨어 엔지니어 \ 코드 원숭이 \ 무엇이든간에 나는 이것을 본 적이 없다고 생각합니다. 내 말은, 확실히 바이너리 값 등을 계산하는 이진 값을 계산할 수는 있지만이 값에 대해 "특별한"것이 무엇인지는 알 수 없습니다.


6
2의 거듭 제곱입니까? :)
Michael K

2
@Michael 2^16.1은 2의 거듭 제곱이지만 특별한 것은 없습니다. 동일합니다 2^0.
rightfold

4
@Radek : 2**0is 1, 실제로는 매우 특별한 숫자입니다.) 그러나 그렇습니다. 일반적으로 지수가 양의 정수인 2의 거듭 제곱에만 관심이 있습니다.

1
왜 10 ^ 3 또는 10 ^ 6이 특별한 숫자입니까?

4
90 년대 인터뷰 질문인가요? 16 비트는 그때 특별했다
Chris S

답변:


81

(2 16 - 1)의하거나 또는 65535 0xFFFF또는 "64K"는 2 바이트의 최대 값이다. 오랫동안 CPU는 16 비트 아키텍처를 사용 했으며 OS도 16 비트 작업과 "워드"를 기반으로했습니다 . 16 비트 명령과 16 비트 메모리 주소가있었습니다. 많은 시스템 / 컴파일러는 여전히 정수에 16 비트를 사용합니다.

따라서 (2 16-1 )은 16 비트 (부호없는) 정수가 보유 할 수있는 가장 큰 숫자이고 16 비트 아키텍처가 액세스 할 수있는 가장 큰 메모리 주소이기 때문에 특별합니다.


23
참고로, 그것은 : Excel 스프레드 시트의 행 수이기도합니다
트래비스 기독교

2
여전히 한계가 있습니까?
JeffO

6
나는 정정되었다. 어쩌면 내가 끝까지 스크롤 한 후 시간이 지났을 것입니다.
트래비스 기독교

3
@Travis : 마지막 문장에 오류가 있습니다. 2 ^ 16에는 17 비트가 필요합니다.
PSU

2
65535는 ipv4 (및 ipv6?) 프로토콜에서 볼 수있는 가장 높은 포트 번호입니다.
CoatedMoose 5

58

Steve Yegge의 기사에서 온 몸에서

응시자는 비트와 바이트가 무엇인지 알아야합니다. 그들은 이진수로 계산할 수 있어야한다. 예를 들어, 2 ^ 5 또는 2 ^ 10이 10 진수 인 것을 알려줄 수 있어야합니다. 당신이 2 ^ 16와 함께 물어볼 때 그들은 당신을 멍하게 쳐다 보지 않아야합니다. 특별한 숫자입니다. 그들은 그것을 알아야합니다.

나는 당신이 질문에서 인용 한 비트에서 벗어났습니다. 그것은 후보가 그것이 의미를 설명 할 수 있어야한다고 들었지만, 문맥 상 후보자들은 머리 꼭대기 에서 2 16 의 십진수 변환이 무엇인지 알아야한다고 말하고 있습니다.

이것의 중요성은 인간이 계산에 십진수를 사용하기 때문에 (특히 대부분의 상황에서) 대부분의 경우, 저장, 메모리 또는 문자 인코딩에 사용 되는 공통 바이트 블록의 대략적인 용량을 알아야 한다는 것입니다. 바이트는 8 비트이므로 가장 일반적인 것은 8, 16, 24, 32 및 64입니다.

현재 2 32 는 개발자가 처리하는 가장 일반적으로 발생하는 용량입니다. 나는 2 32 가 대략 40 억 (서명 된 경우 최대 값이 ~ 20 억) 이라는 것을 모르는 개발자들을 의심합니다 . 왜냐하면 그들은 데이터베이스에 얼마나 많은 레코드가 저장 될 수 있는지 대략 찾지 않았기 때문입니다. 32 비트 사용하는 int기본 키에 대한들, 또는 32 비트 사용 된 코드 때 int의 ID를, 날짜 등은 64 비트에 리팩토링해야합니다. 1

2 16 은 Java의 총 용량입니다 short. (총 숫자 사이 -2 15 2 15 -1)

개발자는 마음에 8 비트가 무엇인지 알아야합니다. 많은 일반적인 사용법 중에 ASCII 문자 인코딩이 있습니다.

나는 프로그래머가 전혀 2 14 또는 2 18 을 알 것으로 기대하지는 않을 것입니다.하지만 아마도 2 16 을 알고있을 것입니다 . 정수를 쉽게 기억할 수있는 매우 일반적으로 발생하는 수와 짧은 수 (65536)이기 때문입니다.


1 : Call of Duty : MW2 또는 iPhone Game Center의 리더 보드를 탐색하면 최고 점수 값이 2,147,483,647 (2 31 -1, 부호있는 2 32 정수 의 최대 값) 인 사기꾼이 자주 나타납니다 .


22
기억해야 할 것은 2 ^ 10은 약 1,000이고 거기에서 2 ^ 20은 백만이고 2 ^ 30은 10 억입니다. 그리고 이것의 도움으로 2 ^ 14가 1 천 6 백만인 것을 "보는"것이 다소 쉬워서, 이진수와 십진수 사이에서 정신적으로 빠르게 변환 할 수 있습니다. 그리고 2 ^ 64는 16 * 10 ^ 18입니다. 흠 ... 160 억 억 :)
Maglob

@ Maglob, 감사합니다. 좋은 지적입니다. 1 분이 걸렸기 때문에 2 ^ 64에 어떻게 도착했는지 주목할 가치가 있습니다. 1000은 10 ^ 3이며 대략 2 ^ 10입니다. 64는 4와 60입니다. 60/10은 6, 6 * 3은 18이므로 다음과 같이 얻을 수 있습니다. 10 ^ 18 * (2 ^ 4 또는 16) ...
Nicole

2
어. 나는 (그리고 어떻게 든 그것을 편집 할 수 없습니다) ^ 14 (2)는 물론 여섯입니다 위의 오타 하지 만. (나는 결국 "보기"가 쉽지 않다고 생각한다.)
Maglob

+1 좋은 답변입니다. 더 완전한 맥락은 당신이 생각할 수있는 사람을 찾고, 특히 맥락과 영역에 대한 지식이 있다는 것입니다.
quick_now

4
ASCII는 7 비트입니다. ;-)
Brendan

3

2 16 을 "특수"로 볼 수있는 유일한 이유 는 16 비트 운영 체제에서 단일 레지스터에 저장할 수있는 가장 높은 정수보다 하나 이상이기 때문입니다.

마찬가지로 동일한 논리를 2 32 및 32 비트 운영 체제에 적용 할 수 있습니다 .

질문이 중요한 지식인지 아닌지를 말할 수 있기 전에 질문에 대한 더 많은 컨텍스트를 알아야합니다.


맹세 컨데 내가 쓴 내용의 대부분을 걸러 내야 했어요 내가 본 것은 2 ^ 16이었고 가장 높은 정수였습니다.
ChaosPandion

6
정확하지 않습니다. 16 비트 운영 체제에서 32 비트 (또는 그 이상) 데이터 유형을 가질 수 있습니다. 16 비트 정수는 16 비트 프로세서의 단일 레지스터에 저장할 수있는 가장 큰 값입니다.
Chinmay Kanchi

@Chinmay-point taken;)
ChrisF
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.