มีบางสิ่งที่พิเศษเกี่ยวกับหมายเลข 65535 หรือไม่?


11

2¹⁶-1 & 2⁵ = 2⁵ (หรือ? ชัด?)

ผู้พัฒนาถามฉันในวันนี้ 65535 & 32 bitwise คือ2¹⁶-1 & 2⁵ =? ตอนแรกฉันคิดว่าเป็นไปตามธรรมชาติ 32 แต่ดูเหมือนง่ายที่ฉันคิดว่าเป็นเวลาหลายนาทีแล้วตอบ 32. 32 ดูเหมือนจะเป็นคำตอบที่ถูกต้อง แต่อย่างไร 65535 = 2¹⁶-1 = 1111111111111111 (แต่มันดูไม่ถูกต้องเพราะเลขฐานสองนี้ทั้งหมดควรเป็น -1 (?)), 32 = 100,000 แต่ฉันไม่สามารถแปลงมันในหัวของฉันดังนั้นฉันตอบ 32 แล้วตั้งแต่ฉัน เพื่อตอบคำถาม คำตอบที่ 32 เป็นเรื่องจริงเล็กน้อย เป็นเช่นเดียวกัน 2 same-1 & 2 &-1 = 31 หรือไม่ ทำไมนักพัฒนาถึงถามฉันเกี่ยวกับ 65535

ไบนารีสิ่งที่ฉันถูกขอให้ประเมินคือ 1111111111111111 & 100000 แต่ฉันไม่เข้าใจว่าทำไม 1111111111111111 ไม่ใช่ -1 ไม่ควรเป็น -1 65535 เป็นตัวเลขที่ให้มากเกินและฉันจะรู้ได้อย่างไร


3
จะต้องมีบางสิ่งที่พิเศษ มันทำให้ฉันนึกถึง 56 6635, มาตรฐานแห่งชาติของสาธารณรัฐเช็กสำหรับเบียร์ อืม ... เวลาสำหรับเบียร์
joshp

5
คุณทำการโจมตีหลายครั้งมากเกินไป: 65535 ให้ -1 เฉพาะในส่วนเลขคณิตของสองบิต 16 บิต มันให้ -0 ในเลขคณิตส่วนเสริม 16 บิตหนึ่งตัวและ 65535 ในส่วนประกอบ 32 บิตสองตัวและส่วนประกอบคณิตศาสตร์หนึ่งตัว
mouviciel

3
เป็นขีด จำกัด สูงสุดของพอร์ต TCP
Renae Lider

คำตอบ:


23

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

น่าสนใจพอแม้ว่าสถานะที่ลงนามแล้วนั้นไม่ได้เป็นปัจจัยเมื่อทำการตรรกะบิตการดำเนินการ บิตไม่ได้เซ็นชื่อเองเนื่องจากเป็นส่วนประกอบที่ต่ำที่สุดในคอมพิวเตอร์ มันระบุโดยการดำเนินการ cpu ถ้าบิตในอดีต การลงทะเบียนจะได้รับการลงนามหรือไม่ได้ลงนาม

จำนวนลบถูกสร้างขึ้นโดยการตั้งค่าบิตที่สำคัญที่สุด (MSB) เป็นจริงหากจำนวนนั้นถูกถือว่าเป็นเครื่องหมาย (ซึ่ง "ด้าน" หรือบิตภายนอกที่จะถูกตั้งค่าแตกต่างกันไปขึ้นอยู่กับสถาปัตยกรรมซีพียูเช่น big-endian / little-endian ).


9
เครื่องจักรที่ทันสมัยส่วนใหญ่แปลงเป็นค่าลบโดยการพลิกบิตและเพิ่มส่วนเติมหนึ่ง: 2 เพียงแค่ตั้งค่าหนึ่งบิตจะทำให้คุณมีปัญหากับ +0 และ -0
James

1
นั่นไม่ใช่ปัญหาเสมอไป 1 ส่วนเติมเต็มตัดเหลือศูนย์โดยไม่คำนึงถึงเครื่องหมายผลลัพธ์ 2 ส่วนเติมเต็มไปทาง -infinity ในบางแอปพลิเคชันอาจทำให้คุณมีปัญหา
John R. Strohm

18

มันเป็นเรื่องเล็กน้อย 65535 ในเลขฐานสองคือทั้งหมดดังนั้น ANDING ด้วย X ใดก็ตามที่น้อยกว่า 65535 จะให้ X


10

ตอบคำถามส่วนที่สองของคุณ คุณได้ติดแท็กเป็นดังนั้น 65535 ใน 32 บิตคือ00000000000000001111111111111111ลงนามหรือไม่ได้ลงนามไม่ใช่ -1

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