it-swarm-vi.com

Tại sao 2 ^ 16 là số "đặc biệt"?

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ế :

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.

49
javamonkey79

(216 - 1) hoặc 65535 hoặc 0xFFFF hoặc "64k" là giá trị tối đa của 2 byte. Trong một thời gian dài CPU được 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 16 bit và "words" . 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, (216 - 1) đặ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à địa chỉ bộ nhớ lớn nhất mà kiến ​​trúc 16 bit có thể truy cập.

82
Travis Christian

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ể tính 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ọ, cái gì chuyển đổi thập phân của 216 là.

Điều quan trọng của việc 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 của chúng ta (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 thông thường 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.

Ở thời điểm hiện tại tôi sẽ nói 232 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 232 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 bản ghi có thể được lưu trữ trong cơ sở dữ liệu của họ sử dụng 32-bit ints cho các khóa chính hoặc khi mã cũ sử dụng 32-bit ints cho ID, ngày, v.v. sẽ cần phải được cấu trúc lại thành 64 bit.1

216 là tổng dung lượng của Java short. (Tổng số giữa -215 và 215-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à ASCII mã hóa ký tự.

Tôi sẽ không mong đợi một lập trình viên biết 214 hoặc 218 tất cả, nhưng tôi có thể mong đợi rằng họ biết 216 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à 231-1, giá trị tối đa của 2 đã ký32 số nguyên.

58
Nicole

Lý do duy nhất tôi có thể thấy liên quan đến 216 "đặc biệt" là bởi 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 232 và hệ điều hành 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.

3
ChrisF