ทำไม 2 ^ 16 จึงเป็นหมายเลข“ พิเศษ” [ปิด]


48

ตกลงฉันรู้สึกโง่ที่ถามสิ่งนี้ - แต่ในบทความของ Jeff: ทำให้หน้าจอสัมผัสโทรศัพท์ถูกต้องและระบุไว้ในคำถามหน้าจอโทรศัพท์สำคัญ 5 ข้อ :

พวกเขาไม่ควรจ้องมองที่คุณเมื่อคุณถามด้วย 2 ^ 16 คือ มันเป็นหมายเลขพิเศษ พวกเขาควรรู้

ฉันเคยเป็นนักพัฒนาซอฟต์แวร์ \ software \ code monkey \ ไม่ว่าจะเกิดอะไรขึ้นซักพักแล้วและฉันไม่คิดว่าจะเจอสิ่งนี้ ฉันหมายถึงฉันสามารถนับค่าไบนารี่ได้อย่างแน่นอนการดำเนินการขั้นพื้นฐานกับพวกเขา ฯลฯ ฯลฯ แต่ฉันไม่เห็นสิ่งที่ "พิเศษ" เกี่ยวกับค่านี้


6
มันคือพลังของ 2? :)
Michael K

2
@Michael 2^16.1ยังเป็นพลังของ 2 แต่ไม่มีอะไรพิเศษ 2^0เหมือนกันสำหรับ
rightfold

4
@ Radek: 2**0คือ1ซึ่งอันที่จริงแล้วเป็นจำนวนที่พิเศษมาก;) แต่ใช่เรามักจะเกี่ยวข้องกับพลังของทั้งสองโดยที่เลขชี้กำลังเป็นจำนวนเต็มบวก

1
แล้วทำไมเลขพิเศษคือ 10 ^ 3 หรือ 10 ^ 6 ล่ะ?

4
นี่เป็นคำถามสัมภาษณ์จาก 90 หรือไม่? 16 บิตเป็นพิเศษตอนนั้น
Chris S

คำตอบ:


81

(2 16 - 1) หรือ 65535 หรือ0xFFFFหรือ "64k" เป็นค่าสูงสุด 2 ไบต์ เป็นเวลานานซีพียูที่ใช้สถาปัตยกรรมแบบ 16 บิตและระบบปฏิบัติการที่มีพื้นฐานเช่นเดียวกันในการดำเนินงาน 16 บิตและ"คำพูด" มีคำสั่ง 16 บิตและที่อยู่หน่วยความจำ 16 บิต ระบบ / คอมไพเลอร์จำนวนมากยังคงใช้ 16 บิตสำหรับจำนวนเต็ม

ดังนั้น (2 16 - 1) เป็นพิเศษเพราะเป็นจำนวนมากที่สุดที่จำนวนเต็ม 16 บิต (ไม่ได้ลงนาม) สามารถเก็บไว้และที่อยู่หน่วยความจำที่ใหญ่ที่สุดที่สถาปัตยกรรม 16 บิตสามารถเข้าถึงได้


23
FYI ก็ยังมีจำนวนแถวในกระดาษคำนวณ Excel :)
เทรวิสคริสเตียน

2
นั่นยังคงเป็นขีด จำกัด หรือไม่?
JeffO

6
ฉันยืนแก้ไขแล้ว อาจจะนานแล้วนะที่ฉันเลื่อนไปจนสุดทาง
Travis Christian

3
@Travis: ประโยคสุดท้ายมีข้อผิดพลาดแบบหนึ่งต่อหนึ่ง 2 ^ 16 ต้องการ 17 บิต
PSU

2
65535 ยังเป็นหมายเลขพอร์ตสูงสุดที่พบในโปรโตคอล ipv4 (และ ipv6?)
CooseMoose

58

จากเนื้อหาทั้งหมดจากบทความของ Steve Yegge

ผู้สมัครควรรู้ว่าบิตและไบต์คืออะไร พวกเขาควรจะสามารถนับเป็นเลขฐานสอง; เช่นพวกเขาควรบอกคุณได้ว่า 2 ^ 5 หรือ 2 ^ 10 เป็นทศนิยม พวกเขาไม่ควรจ้องมองที่คุณเมื่อคุณถามด้วย 2 ^ 16 คือ มันเป็นหมายเลขพิเศษ พวกเขาควรรู้

ฉันถูกโยนออกไปจากส่วนที่คุณยกมาในคำถาม มันฟังเหมือนผู้สมัครควรจะสามารถอธิบายมันอย่างมีนัยสำคัญ แต่ในบริบทที่เขาบอกว่าผู้สมัครควรรู้ปิดด้านบนของหัวของพวกเขาในสิ่งที่แปลงทศนิยม 2 16คือ

ความสำคัญของสิ่งนี้คือเนื่องจากมนุษย์เรายังคงใช้ทศนิยมในการนับโดยเฉพาะในหัวของเรา (ในสถานการณ์ส่วนใหญ่) เราจำเป็นต้องทราบความสามารถคร่าวๆของบล็อกไบต์ทั่วไปที่เราใช้สำหรับการจัดเก็บหน่วยความจำหรือแม้แต่การเข้ารหัสอักขระ เนื่องจากไบต์คือ 8 บิตส่วนใหญ่คือ 8, 16, 24, 32 และ 64

ในปัจจุบันฉันจะบอกว่า 2 32เป็นกำลังการผลิตส่วนใหญ่ที่นักพัฒนาเกี่ยวข้อง ฉันสงสัยนักพัฒนาที่ไม่ทราบว่า 2 32มีประมาณ 4 พันล้าน (มูลค่าสูงสุด 2 พันล้านถ้าลงนาม) เนื่องจากหมายความว่าพวกเขาไม่เคยใส่ใจที่จะค้นหาว่ามีเร็กคอร์ดจำนวนเท่าใดที่สามารถเก็บไว้ในฐานข้อมูลของพวกเขา ใช้ 32 บิตintสำหรับคีย์หลักหรือเมื่อรหัสเก่าใช้ 32 บิตintสำหรับรหัสวันที่ ฯลฯ จะต้องได้รับการปรับสภาพใหม่เป็น 64 บิต 1

2 16เป็นกำลังการผลิตรวมของ shortJava (ตัวเลขทั้งหมดระหว่าง -2 15และ 2 15 -1)

นักพัฒนาควรรู้ด้วยใจว่า 8-bit คืออะไร หนึ่งในประเพณีที่พบบ่อยคือการเข้ารหัสตัวอักษร 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 32


22
สิ่งที่ควรจดจำคือ 2 ^ 10 มีค่าประมาณหนึ่งพันและจากนั้นคุณจะได้รับ 2 ^ 20 คือหนึ่งล้านและ 2 ^ 30 เป็นพันล้านเป็นต้น และด้วยความช่วยเหลือจากสิ่งนี้มันค่อนข้างง่ายที่จะ "เห็น" ว่า 2 ^ 14 นั้นมีจำนวนสิบหกล้านดังนั้นคุณสามารถแปลงสภาพจิตระหว่างไบนารีและทศนิยมอย่างรวดเร็ว และ 2 ^ 64 คือ 16 * 10 ^ 18 ซึ่งเป็น hmm ... 16000000000 พันล้าน :)
Maglob

@ Maglob ขอบคุณจุดดี มันน่าสังเกตว่าคุณมาถึง 2 ^ 64 แล้วเพราะฉันใช้เวลาสักครู่ 1,000 คือ 10 ^ 3 ซึ่งประมาณ 2 ^ 10 64 คือ 4 และ 60 60/10 คือ 6, 6 * 3 คือ 18 ดังนั้นคุณจะได้: 10 ^ 18 * (2 ^ 4 หรือ 16) ...
นิโคล

2
uuh ฉันพิมพ์ผิดด้านบน (และไม่สามารถแก้ไขได้) 2 ^ 14 เป็นหนึ่งหมื่นหกพันไม่ใช่ล้าน (ฉันเดาว่ามันไม่ใช่เรื่องง่ายที่จะ "เห็น" เลย :) :)
Maglob

+1 คำตอบที่ดีเพราะบริบทที่สมบูรณ์กว่าคือคุณกำลังมองหาคนที่สามารถคิดได้และโดยเฉพาะอย่างยิ่งที่จะมีความรู้เกี่ยวกับบริบทและโดเมน
quick_now

4
อืม, ASCII คือ 7-bit .. ;-)
Brendan

3

เหตุผลเดียวที่ฉันเห็นเกี่ยวกับ 2 16ว่า "พิเศษ" เป็นเพราะมันเป็นหนึ่งในจำนวนเต็มสูงสุดที่คุณสามารถเก็บไว้ในการลงทะเบียนเดียวบนระบบปฏิบัติการ 16 บิต

ในทำนองเดียวกันคุณสามารถใช้ตรรกะเดียวกันกับระบบปฏิบัติการ2 32และ 32 บิต

ฉันจำเป็นต้องรู้บริบทเพิ่มเติมสำหรับคำถามก่อนที่จะสามารถพูดได้ว่ามันเป็นความรู้ชิ้นสำคัญหรือไม่


ฉันสาบานว่าฉันจะต้องกรองส่วนใหญ่ของสิ่งที่คุณเขียน ทั้งหมดที่ฉันเห็นคือ 2 ^ 16 และจำนวนเต็มสูงสุด
ChaosPandion

6
สิ่งนี้ไม่ถูกต้อง เป็นไปได้อย่างสมบูรณ์ที่จะมีชนิดข้อมูล 32 บิต (หรือสูงกว่า) ในระบบปฏิบัติการ 16 บิต จำนวนเต็ม 16 บิตเป็นค่าที่มากที่สุดที่สามารถเก็บไว้ในการลงทะเบียนเพียงครั้งเดียวบนโปรเซสเซอร์ 16 บิต
Chinmay Kanchi

@Chinmay - จุดถ่าย;)
ChrisF
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.