Tại sao 2 ^ 16 một số đặc biệt của người Viking? [đóng cửa]


48

OK, tôi cảm thấy ngu ngốc khi hỏi điều này - nhưng trong bài viết của Jeff: Bắt đúng màn hình điện thoại phỏng vấn và được nêu ban đầu trong 5 câu hỏi màn hình điện thoại thiết yếu :

Họ không nên nhìn chằm chằm vào bạn khi bạn hỏi với 2 ^ 16 là. Đó là một con số đặc biệt. Họ nên biết điều đó.

Tôi đã từng là một nhà phát triển \ kỹ sư phần mềm \ code khỉ \ bất cứ lúc nào và tôi không nghĩ mình đã gặp phải điều này. Ý tôi là, tôi chắc chắn có thể đếm các giá trị nhị phân thực hiện các thao tác cơ bản trên chúng, v.v. Nhưng tôi không thấy điều gì là "đặc biệt" về giá trị này.


6
Đó là sức mạnh của 2? :)
Michael K

2
@Michael 2^16.1cũng là một sức mạnh của 2, nhưng không có gì đặc biệt. Tương tự cho 2^0.
đúng

4
@Radek: 2**01, mà là trong thực tế, một số lượng rất đặc biệt;) Nhưng vâng, chúng ta thường chỉ quan tâm đến quyền hạn của hai nơi số mũ là một số nguyên dương.

1
Chà, tại sao 10 ^ 3 hay 10 ^ 6 là một số đặc biệt?

4
Đây có phải là một câu hỏi phỏng vấn từ những năm 90? 16 bit đã trở lại đặc biệt sau đó
Chris S

Câu trả lời:


81

(2 16 - 1) hoặc 65535 0xFFFFhoặc "64k" là giá trị tối đa của 2 byte. Trong một thời gian dài, CPU sử dụng kiến trúc 16 bit và các hệ điều hành cũng tương tự dựa trên các hoạt động và "từ" 16 bit . Có các lệnh 16 bit và địa chỉ bộ nhớ 16 bit. Rất nhiều hệ thống / trình biên dịch vẫn sử dụng 16 bit cho số nguyên.

Vì vậy, (2 16 - 1) là đặc biệt vì đây là số lớn nhất mà số nguyên 16 bit (không dấu) có thể giữ và là địa chỉ bộ nhớ lớn nhất mà kiến ​​trúc 16 bit có thể truy cập.


23
FYI, đó cũng là số lượng hàng trong bảng tính Excel :)
Travis Christian

2
Đó vẫn là giới hạn?
JeffO

6
Tôi đứng sửa. Có lẽ đã được một lúc kể từ khi tôi cuộn xuống.
Travis Christian

3
@Travis: Câu cuối có lỗi ngoài luồng; 2 ^ 16 yêu cầu 17 bit.
PSU

2
65535 cũng là số cổng cao nhất được tìm thấy trong các giao thức ipv4 (và ipv6?).
CoatedMoose

58

Từ cơ thể đầy đủ từ bài viết của Steve Yegge,

Thí sinh nên biết bit và byte là gì. Họ sẽ có thể đếm trong nhị phân; ví dụ, họ sẽ có thể cho bạn biết 2 ^ 5 hoặc 2 ^ 10 là số thập phân. Họ không nên nhìn chằm chằm vào bạn khi bạn hỏi với 2 ^ 16 là. Đó là một con số đặc biệt. Họ nên biết điều đó.

Tôi đã bị ném ra khỏi bit bạn trích dẫn trong câu hỏi; Nghe có vẻ như một ứng cử viên có thể mô tả tầm quan trọng của nó, nhưng trong bối cảnh anh ta nói rằng các ứng cử viên nên biết, ngoài đỉnh đầu của họ, chuyển đổi thập phân của 2 16 là gì.

Điều quan trọng của điều này là vì con người chúng ta vẫn sử dụng số thập phân để đếm, đặc biệt là trong đầu (trong hầu hết các trường hợp), chúng ta cần biết khả năng thô của các khối byte phổ biến mà chúng ta sử dụng để lưu trữ, bộ nhớ hoặc thậm chí mã hóa ký tự. Vì một byte là 8 bit, phổ biến nhất là 8, 16, 24, 32 và 64.

Tại thời điểm hiện tại tôi sẽ nói 2 32 là khả năng xảy ra phổ biến nhất mà một nhà phát triển đề cập đến. Tôi nghi ngờ các nhà phát triển không biết rằng 2 32 là khoảng 4 tỷ (giá trị tối đa ~ 2 tỷ nếu được ký), vì điều đó có nghĩa là họ chưa bao giờ bận tâm tìm hiểu có bao nhiêu hồ sơ có thể được lưu trữ trong cơ sở dữ liệu của họ sử dụng 32 bit intcho các khóa chính hoặc khi mã cũ sử dụng 32 bit intcho ID, ngày, v.v. sẽ cần phải được cấu trúc lại thành 64 bit. 1

2 16 là tổng công suất của Java short. (Tổng số từ -2 15 đến 2 15 -1)

Một nhà phát triển nên biết trái tim 8 bit là gì. Trong số nhiều cách sử dụng phổ biến là mã hóa ký tự ASCII.

Tôi hoàn toàn không mong muốn một lập trình viên biết 2 14 hoặc 2 18 , nhưng tôi có thể mong đợi rằng họ biết 2 16 vì đó là một số rất thường xảy ra và số đủ ngắn (65536) để dễ dàng ghi nhớ số đầy đủ.


1: Nếu bạn duyệt qua bảng xếp hạng của Call of Duty: MW2 hoặc iPhone Game Center, bạn sẽ thường thấy những kẻ gian lận ở đầu với giá trị điểm cao là 2.147.483.647, là 2 31 -1, giá trị tối đa của một số nguyên 2 32 đã ký .


22
Một điều tốt để nhớ là 2 ^ 10 là khoảng một nghìn, và từ đó bạn nhận được 2 ^ 20 là một triệu, và 2 ^ 30 tỷ và cứ thế. Và với sự giúp đỡ của điều này, thật dễ dàng để "thấy" rằng 2 ^ 14 là mười sáu triệu, vì vậy bạn có thể nhanh chóng thực hiện chuyển đổi tinh thần giữa nhị phân và thập phân. Và 2 ^ 64 là 16 * 10 ^ 18, tức là ... 16 tỷ tỷ :)
Maglob

@Maglob, cảm ơn, điểm tốt. Thật đáng chú ý khi bạn đến 2 ^ 64, vì tôi mất một phút. 1000 là 10 ^ 3, tức là khoảng 2 ^ 10. 64 là 4 và 60. 60/10 là 6, 6 * 3 là 18, vì vậy bạn nhận được: 10 ^ 18 * (2 ^ 4 hoặc 16) ...
Nicole

2
Uuh. Tôi đã mắc một lỗi đánh máy ở trên (và bằng cách nào đó không thể chỉnh sửa nó) 2 ^ 14 tất nhiên là mười sáu nghìn chứ không phải triệu. (Tôi đoán rằng thật không dễ để "nhìn" sau tất cả :)
Maglob

+1 Câu trả lời hay, bởi vì bối cảnh đầy đủ hơn là bạn đang tìm kiếm người có khả năng suy nghĩ và đặc biệt là có kiến ​​thức về bối cảnh và miền.
quick_now

4
Ừm, ASCII là 7 bit .. ;-)
Brendan

3

Lý do duy nhất tôi có thể thấy liên quan đến 2 16 là "đặc biệt" là vì nó nhiều hơn số nguyên cao nhất bạn có thể lưu trữ trong một thanh ghi duy nhất trên hệ điều hành 16 bit.

Tương tự, bạn có thể áp dụng logic tương tự cho 2 hệ điều hành 32 và 32 bit.

Tôi cần biết thêm ngữ cảnh cho câu hỏi trước khi có thể nói liệu đó có phải là một kiến ​​thức quan trọng hay không.


Tôi thề tôi đã lọc ra hầu hết những gì bạn viết. Tất cả tôi thấy là 2 ^ 16 và số nguyên cao nhất.
ChaosPandion

6
Điều này là không chính xác. Hoàn toàn có thể có kiểu dữ liệu 32 bit (hoặc cao hơn) trong hệ điều hành 16 bit. Số nguyên 16 bit đơn giản là giá trị lớn nhất có thể được lưu trữ trong một thanh ghi trên bộ xử lý 16 bit.
Chinmay Kanchi

@Chinmay - lấy điểm;)
ChrisF
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.