คุณสามารถแปลงทศนิยมเป็นไบนารีและไบนารีเป็นทศนิยม แต่คุณจะแสดงหมายเลข "256" ได้อย่างไร
255 = 11111111
1 ไบต์ไม่สามารถมีเลขฐานสองมากกว่า 8 หลัก (บิต) เป็นไปได้อย่างไร?
คุณสามารถแปลงทศนิยมเป็นไบนารีและไบนารีเป็นทศนิยม แต่คุณจะแสดงหมายเลข "256" ได้อย่างไร
255 = 11111111
1 ไบต์ไม่สามารถมีเลขฐานสองมากกว่า 8 หลัก (บิต) เป็นไปได้อย่างไร?
คำตอบ:
คุณถามว่าจะแทน 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 และเล่นกับบิตเพื่อดูว่าพวกมันสัมพันธ์กับการแทนค่าทศนิยมอย่างไร
ทีนี้คุณต้องมี 2 ไบต์เพื่อแสดงว่า 256 = 00000001 00000000
อย่างที่คุณทราบแล้ว 255d (ทศนิยม) เท่ากับ 11111111b (ไบนารี) หากคุณต้องการเพิ่ม 1 ลงในค่ามีความเป็นไปได้สองอย่าง:
คุณมีแค่ 8 บิตเท่านั้น ในกรณีนี้จะเกิดการล้นที่เรียกว่า ดังนั้น "ภายใน" 1 จะถูกเพิ่มส่งผลให้ 100000000b (256d ใน 9 บิต) แต่เนื่องจากคุณมีเพียง 8 บิตเท่านั้น 8 บิตที่ต่ำกว่าจะถูก "ส่งคืน" ดังนั้นคุณจะสิ้นสุดด้วย 0d = 0b (การตั้งค่าสถานะโอเวอร์โฟลว์พิเศษจะถูกกำหนดไว้ในสถาปัตยกรรมคอมพิวเตอร์ส่วนใหญ่เช่นเดียวกับบันทึกด้านข้าง)
คิดแบบนี้เหมือนกับการนับด้วยนิ้วของคุณ ลองนึกภาพนิ้วของคุณแสดง 9d ตอนนี้คุณเพิ่มนิ้วอีกหนึ่งนิ้ว คุณจบลงด้วย 10. คุณจะทำอย่างไรถ้าคุณต้องการเพิ่มอีก
ความเป็นไปได้อื่นคือคุณมีมากกว่า 8 บิต ในกรณีนี้คุณสามารถเพิ่มตัวเลขได้อีกหนึ่งหลักเพื่อเริ่มต้นและผลลัพธ์จะเป็น 100000000b = 256d
ไบต์เป็น "หน่วย" ที่เล็กที่สุดที่ระบบคอมพิวเตอร์ (ระบบหน่วยความจำ) สามารถระบุได้ ซึ่งหมายความว่าหากคุณต้องการทราบเพียงบิตเดียวคุณต้องขอระบบหน่วยความจำเพื่อให้คุณได้ไบต์หนึ่งจากที่อยู่และจากนั้นคุณต้องคิดค่าบิตที่คุณสนใจในตัวเอง
แต่วิธีเดียวกันกับ 8 บิตประกอบเป็นไบต์มีประเภทข้อมูลที่ใหญ่กว่าเช่นกัน 2 ไบต์ประกอบคำ (16 บิต), สองคำ (สี่ไบต์, 32 บิต) ประกอบคำสองคำ และสถาปัตยกรรม 64 บิตปัจจุบันทุกวันนี้ยังมีประเภทข้อมูล 64 บิต (เรียกอีกอย่างว่ารีจิสเตอร์)
มันคือ 100000000 และมันต้องการมากกว่าหนึ่งไบต์ จริงๆแล้วมันต้องการ 9 บิต
คุณสามารถเป็นตัวแทนได้โดยการดำเนินการเปลี่ยนบิต (ซ้ายหรือขวาขึ้นอยู่กับendiannessของการเป็นตัวแทนไบนารี) ตัวอย่างเช่นสายการบินหนึ่งนี้ทำงานเพื่อการเป็นตัวแทน endian ใหญ่ (ไบต์ที่สำคัญที่สุดก่อน):
1 << 8
ไบต์ที่ไม่ได้ลงชื่อสามารถเก็บค่าได้ 256 ค่าซึ่งรวมช่วงของ [0 - 255] สำหรับค่า 256 คุณจะต้องใช้ชนิดข้อมูลที่สามารถเก็บค่าที่มีขนาดใหญ่กว่าตัวอย่างเช่นจำนวนเต็ม