การเป็นตัวแทนไบนารีของ "256" คืออะไร? [ปิด]


15

คุณสามารถแปลงทศนิยมเป็นไบนารีและไบนารีเป็นทศนิยม แต่คุณจะแสดงหมายเลข "256" ได้อย่างไร

255 = 11111111

1 ไบต์ไม่สามารถมีเลขฐานสองมากกว่า 8 หลัก (บิต) เป็นไปได้อย่างไร?


3
อย่างที่ @Serious ได้พูดไปแล้ว คุณจำเป็นต้องใช้มากขึ้นอีกนิดเพราะคอมพิวเตอร์เริ่มต้นนับจาก 0. Thats 11 ใน "ภาษามือ" หรือ "คนคนหนึ่งมากขึ้น" (ไบต์) ในโลกจริง :)
SOMN

2
ฉันปิดนี่เป็น "ไม่ใช่คำถามจริง" เพราะเป็นการยากที่จะบอกสิ่งที่คุณต้องการรู้ คุณต้องการที่จะรู้ว่าการเป็นตัวแทนไบนารีของตัวเลขหรือไม่? คุณสงสัยว่าเป็นไปได้หรือไม่ที่ตัวเลขมีอยู่ถึงแม้ว่ามันจะไม่พอดีกับไบต์ คุณสงสัยเกี่ยวกับวิธีการจัดเก็บข้อมูลเป็นบิตและไบต์หรือไม่? ใช่ 1 ไบต์ไม่สามารถเก็บได้มากกว่า 8 บิตเพราะนั่นคือคำจำกัดความของไบต์ แต่นั่นไม่ได้กำหนดข้อ จำกัด เกี่ยวกับตัวเลขโดยทั่วไป
Der Hochstapler

คุณไม่สามารถแทน 256 บน 8 บิต
Overmind

คำตอบ:


40

คุณถามว่าจะแทน 256 ในไบนารี่ได้อย่างไร แต่ฉันเดาว่าคุณสงสัยว่าทำไมผู้คนถึงบอกว่า bytes สามารถเก็บตัวเลขต่าง ๆ ได้ 256 ตัวเมื่อจำนวนที่มากที่สุดมันเก็บได้ 255 ในขณะที่ Claudiop กล่าวว่าคอมพิวเตอร์เริ่มนับที่ 0 ดังนั้น 0 เป็นตัวเลขตัวแรก, 1 คือสอง, 2 คือสาม ... 255 คือ 256

นอกจากนี้ 11111111 เป็นเพียง 255 สำหรับไบต์ที่ไม่ได้ลงนาม เมื่อคุณมีไบต์ที่เซ็นชื่อ (ค่าที่เซ็นชื่อเป็นค่าที่สามารถเก็บค่าลบ), 11111111 จะเป็น -1 ดูhttp://en.wikipedia.org/wiki/Two's_complement วิธีการเติมเต็มของวิธีที่สองทำงานโดยการเพิ่มจำนวนลบไปยังผลลัพธ์ที่เป็นบวกใน 0 ตามที่คนอื่น ๆ พูดถ้าเราเพิ่มบิตเป็น 11111111 และประเภทข้อมูลของคุณสามารถรองรับได้เพียง 8 บิตบิตสุดท้ายจะล้นและปล่อยให้คุณ 0 สำหรับไบต์ที่เซ็นชื่อค่าอยู่ในช่วง -128 ถึง 127. 128 จำนวนลบ + 0 + 127 จำนวนบวก = 256 จำนวนรวม

สำหรับค่าที่เซ็นชื่อบิตแรกคือบิต "sign" หากตั้งค่าบิตนี้ไว้ตัวเลขจะเป็นลบ 10,000000 เป็นค่าลบ 01000000 เป็นค่าบวก 11111111 เป็นค่าลบ 01111111 เป็นค่าบวก ...

หากคุณใช้ windows (อาจเป็น mac ก็ได้เช่นกัน) คุณสามารถเปิดเครื่องคิดเลขสลับไปที่โหมดโปรแกรมเมอร์เลือก sbyte และเล่นกับบิตเพื่อดูว่าพวกมันสัมพันธ์กับการแทนค่าทศนิยมอย่างไร

Windows Calculator แสดง 256 ในรูปทศนิยมและเลขฐานสอง



11

อย่างที่คุณทราบแล้ว 255d (ทศนิยม) เท่ากับ 11111111b (ไบนารี) หากคุณต้องการเพิ่ม 1 ลงในค่ามีความเป็นไปได้สองอย่าง:

คุณมีแค่ 8 บิตเท่านั้น ในกรณีนี้จะเกิดการล้นที่เรียกว่า ดังนั้น "ภายใน" 1 จะถูกเพิ่มส่งผลให้ 100000000b (256d ใน 9 บิต) แต่เนื่องจากคุณมีเพียง 8 บิตเท่านั้น 8 บิตที่ต่ำกว่าจะถูก "ส่งคืน" ดังนั้นคุณจะสิ้นสุดด้วย 0d = 0b (การตั้งค่าสถานะโอเวอร์โฟลว์พิเศษจะถูกกำหนดไว้ในสถาปัตยกรรมคอมพิวเตอร์ส่วนใหญ่เช่นเดียวกับบันทึกด้านข้าง)

คิดแบบนี้เหมือนกับการนับด้วยนิ้วของคุณ ลองนึกภาพนิ้วของคุณแสดง 9d ตอนนี้คุณเพิ่มนิ้วอีกหนึ่งนิ้ว คุณจบลงด้วย 10. คุณจะทำอย่างไรถ้าคุณต้องการเพิ่มอีก

ความเป็นไปได้อื่นคือคุณมีมากกว่า 8 บิต ในกรณีนี้คุณสามารถเพิ่มตัวเลขได้อีกหนึ่งหลักเพื่อเริ่มต้นและผลลัพธ์จะเป็น 100000000b = 256d

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

แต่วิธีเดียวกันกับ 8 บิตประกอบเป็นไบต์มีประเภทข้อมูลที่ใหญ่กว่าเช่นกัน 2 ไบต์ประกอบคำ (16 บิต), สองคำ (สี่ไบต์, 32 บิต) ประกอบคำสองคำ และสถาปัตยกรรม 64 บิตปัจจุบันทุกวันนี้ยังมีประเภทข้อมูล 64 บิต (เรียกอีกอย่างว่ารีจิสเตอร์)


ใช่และคอมพิวเตอร์ไม่คิดว่าบิต 64 เหล่านั้นเป็นกลุ่ม 8 ไบต์แยกกัน แต่เป็นหน่วยเดียวซึ่งประกอบด้วย 64 บิต ตัวอย่างเช่นหากคุณมีค่าที่เซ็นชื่อแล้วหนึ่งใน 64 บิตเหล่านั้นเท่านั้นที่เป็นบิตบิต
นาย Lister


0

คุณสามารถเป็นตัวแทนได้โดยการดำเนินการเปลี่ยนบิต (ซ้ายหรือขวาขึ้นอยู่กับendiannessของการเป็นตัวแทนไบนารี) ตัวอย่างเช่นสายการบินหนึ่งนี้ทำงานเพื่อการเป็นตัวแทน endian ใหญ่ (ไบต์ที่สำคัญที่สุดก่อน):

1 << 8

ไบต์ที่ไม่ได้ลงชื่อสามารถเก็บค่าได้ 256 ค่าซึ่งรวมช่วงของ [0 - 255] สำหรับค่า 256 คุณจะต้องใช้ชนิดข้อมูลที่สามารถเก็บค่าที่มีขนาดใหญ่กว่าตัวอย่างเช่นจำนวนเต็ม

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