ฉันอ่านในการสอนการเขียนโปรแกรมการชุมนุมนี้ว่า 8 บิตใช้สำหรับข้อมูลในขณะที่ 1 บิตสำหรับพาริตี้ซึ่งใช้สำหรับตรวจจับข้อผิดพลาดพาริตี้ (เกิดจากความผิดพลาดของฮาร์ดแวร์หรือการรบกวนทางไฟฟ้า)
มันเป็นเรื่องจริงเหรอ?
ฉันอ่านในการสอนการเขียนโปรแกรมการชุมนุมนี้ว่า 8 บิตใช้สำหรับข้อมูลในขณะที่ 1 บิตสำหรับพาริตี้ซึ่งใช้สำหรับตรวจจับข้อผิดพลาดพาริตี้ (เกิดจากความผิดพลาดของฮาร์ดแวร์หรือการรบกวนทางไฟฟ้า)
มันเป็นเรื่องจริงเหรอ?
คำตอบ:
ไบต์ของข้อมูลคือแปดบิตอาจมีบิตเพิ่มเติมต่อไบต์ของข้อมูลที่ใช้ในระบบปฏิบัติการหรือแม้แต่ระดับฮาร์ดแวร์สำหรับการตรวจสอบข้อผิดพลาด (บิตพาริตีหรือแม้แต่รูปแบบการตรวจจับข้อผิดพลาดขั้นสูง) แต่ข้อมูลแปด บิตและแพริตีบิตใด ๆ มักจะมองไม่เห็นกับซอฟต์แวร์ ไบต์ถูกทำให้เป็นมาตรฐานเพื่อหมายถึง 'แปดบิตของข้อมูล' ข้อความไม่ผิดที่บอกว่าอาจมีบิตเพิ่มเติมเพื่อเก็บข้อมูลจำนวนหนึ่งมากกว่าแปดบิตของข้อมูล แต่โดยทั่วไปจะไม่ถือว่าเป็นส่วนหนึ่งของ byte ต่อ se ข้อความตัวเองชี้ไปที่ข้อเท็จจริงนี้
คุณสามารถดูได้ในบทต่อไปของบทช่วยสอน:
Doubleword: a 4-byte (32 bit) data item
4 * 8 = 32 อาจใช้เวลาถึง 36 บิตในระบบ แต่สำหรับจุดประสงค์และจุดประสงค์ของคุณมีเพียง 32 บิต
char
ใน C (ซึ่งเป็นสิ่งที่ลิงค์เกี่ยวกับ) เป็นหน่วยที่เล็กที่สุดของแอดเดรสหน่วยความจำ มันเป็นเพียงแค่เรียกว่าถ่านแต่ C มาตรฐานทำให้มันตรงกันไบต์
โดยปกติแล้วไบต์สามารถมีขนาดใดก็ได้และเป็นหน่วยความจำที่สามารถกำหนดแอดเดรสที่เล็กที่สุดได้ วันนี้ 8 บิตไบต์ได้รับมาตรฐานมากสำหรับซอฟต์แวร์ ดังที่ JustAnotherSoul กล่าวฮาร์ดแวร์อาจเก็บบิตมากกว่า 8 บิตของข้อมูล
หากคุณกำลังทำงานกับอุปกรณ์ตรรกะที่ตั้งโปรแกรมได้เช่น FPGAs คุณอาจเห็นว่าหน่วยความจำภายในของพวกเขามักจะสามารถระบุตำแหน่งได้ว่าเป็นบิตขนาด 9 บิตและในฐานะผู้เขียน HDL คุณสามารถใช้บิตที่ 9 เพื่อตรวจสอบข้อผิดพลาด ของข้อมูลต่อ "ไบต์" เมื่อซื้อชิปหน่วยความจำสำหรับฮาร์ดแวร์ที่กำหนดเองโดยทั่วไปคุณมีหน่วยที่สามารถเลือกได้ 8 หรือ 9 บิต (หรือ 16/18, 32/36 ฯลฯ ) แล้วมันขึ้นอยู่กับคุณว่าคุณมี "ไบต์" 9 บิตหรือไม่ คุณทำกับบิตที่ 9 ถ้าคุณเลือกที่จะมี
ข้อความนั้นเป็นถ้อยคำไม่ดีอย่างยิ่ง เขาเกือบจะพูดถึงRAM ECC (รหัสแก้ไขข้อผิดพลาด)อย่างแน่นอน
ECC ram โดยทั่วไปจะเก็บข้อมูล 8-bit โดยใช้ 9-bits บิตต่อไบต์พิเศษถูกใช้เพื่อเก็บรหัสการแก้ไขข้อผิดพลาด
(ในทั้งสองกรณีทุกไบต์จะกระจายไปทั่วทุกชิปรูปภาพที่ได้รับความอนุเคราะห์จากPuget Systems )
นี่เป็นสิ่งที่ผู้ใช้ฮาร์ดแวร์มองไม่เห็นอย่างสมบูรณ์ ในทั้งสองกรณีซอฟต์แวร์ที่ใช้ RAM นี้จะเห็น 8 บิตต่อไบต์
นอกเหนือจาก: รหัสแก้ไขข้อผิดพลาดใน RAM มักจะไม่ได้ 1 บิตต่อไบต์; พวกเขาแทน 8 บิตต่อ 8 ไบต์ สิ่งนี้มีค่าใช้จ่ายของพื้นที่เท่ากัน แต่มีข้อดีเพิ่มเติมบางประการ ดูSECDEDสำหรับข้อมูลเพิ่มเติม
โดยทั่วไปแล้วคำตอบสั้น ๆ ก็คือไบต์คือ 8 บิต (บางครั้งถึงจุดที่ไม่ถูกต้อง) แต่เป็นคำนิยามที่คนส่วนใหญ่ (รวมถึงโปรแกรมเมอร์จำนวนมาก) มีความคุ้นเคยและคำจำกัดความที่เกือบทุกคนเริ่มต้น (โดยไม่คำนึงถึงจำนวนไบต์ที่แตกต่างกัน) ฉันต้องทำงานด้วย)
โดยเฉพาะอย่างยิ่งไบต์เป็นหน่วยความจำที่เล็กที่สุดที่อยู่ได้สำหรับสถาปัตยกรรมที่กำหนดและโดยทั่วไปจะมีขนาดใหญ่พอที่จะเก็บอักขระข้อความเดียว ในสถาปัตยกรรมสมัยใหม่ส่วนใหญ่ไบต์จะถูกกำหนดเป็น 8 บิต ISO / IEC 80000-13 ยังระบุว่าไบต์คือ 8 บิตเช่นเดียวกับฉันทามติที่เป็นที่นิยม (หมายความว่าถ้าคุณกำลังพูดถึงพูดว่า 9- บิตไบต์คุณจะพบปัญหามากเว้นแต่ว่าคุณจะได้อย่างชัดเจน ระบุว่าคุณไม่ได้หมายถึงไบต์ปกติ)
อย่างไรก็ตามมีข้อยกเว้นสำหรับกฎนี้ ตัวอย่างเช่น:
sizeof(char)
ในขณะที่ทางอ้อมระบุว่าchar
ต้องมีอย่างน้อย 8 บิตแต่ละไบต์ต้องมีที่อยู่ที่ไม่ซ้ำกันและไม่มีช่องว่างใด ๆ ระหว่างไบต์ที่ต่อเนื่องกัน ในความทรงจำ. นี่คือการทำให้ภาษาแบบพกพามากขึ้นกว่าที่พวกเขาจะต้องถ้าพวกเขาต้องการไบต์ 8 บิตอย่างชัดเจน [จำนวนของบิตในไบต์ถูกระบุเป็นCHAR_BIT
ใน "C จำกัด " ส่วนหัวของห้องสมุด ( limits.h
ใน C, climits
ใน C ++)]
ดังนั้นในกรณีส่วนใหญ่ไบต์โดยทั่วไปจะเป็น 8 บิต หากไม่เป็นอาจเป็น 9 บิตและอาจเป็นส่วนหนึ่งของคำ 36 บิตหรือไม่ก็ได้
โปรดทราบว่าไบต์นั้นไม่ได้ถูกกำหนดอย่างชัดเจนหากไม่มีบริบท เท่าที่เกี่ยวข้องกับสถาปัตยกรรมคอมพิวเตอร์คุณสามารถสันนิษฐานได้ว่าไบต์เป็น 8 บิตอย่างน้อยสำหรับสถาปัตยกรรมสมัยใหม่ นี่คือมาตรฐานส่วนใหญ่โดยการเขียนโปรแกรมภาษาเช่น C ซึ่งจำเป็นต้องมีไบต์อย่างน้อย 8 บิต แต่ไม่ได้ให้การรับประกันใด ๆ สำหรับไบต์ขนาดใหญ่ทำให้ 8 บิตต่อไบต์เป็นสมมติฐานที่ปลอดภัยเท่านั้น
มีคอมพิวเตอร์ที่มียูนิตที่กำหนดแอดเดรสได้มากกว่า 8 บิต (โดยปกติคือ 16 หรือ 32) แต่หน่วยเหล่านั้นมักจะเรียกว่าคำเครื่องไม่ใช่ไบต์ ตัวอย่างเช่นโฆษณาที่มีคำ 32K 32- บิตแรมจะโฆษณาว่ามี 128 KB หรือ RAM ไม่ใช่ 32 KB
สิ่งที่ไม่ได้กำหนดไว้อย่างดีเมื่อมันมาถึงมาตรฐานการสื่อสาร ASCIIยังคงใช้กันอย่างแพร่หลายและมีขนาด 7 บิต (ซึ่งมีขนาดพอดีกับขนาด 8 บิตในคอมพิวเตอร์) ตัวรับส่งสัญญาณ UART ยังคงผลิตเพื่อให้มีขนาดไบต์ที่กำหนดค่าได้ (โดยทั่วไปคุณจะต้องเลือกอย่างน้อยระหว่าง 6, 7 และ 8 บิตต่อไบต์ แต่ 5 และ 9 ไม่เคยได้ยินมาก่อน)
ไบต์มักถูกกำหนดให้เป็นหน่วยที่เล็กที่สุดที่สามารถกำหนดแอดเดรสของหน่วยความจำได้ มันสามารถมีขนาดใดก็ได้ มีสถาปัตยกรรมที่มีขนาดไบต์ทุกที่ระหว่าง 6 และ 9 บิตอาจยิ่งใหญ่กว่า นอกจากนี้ยังมีสถาปัตยกรรมที่หน่วยเดียวที่สามารถกำหนดแอดเดรสได้คือขนาดของรถบัสในสถาปัตยกรรมดังกล่าวเราสามารถพูดได้ว่าพวกเขาไม่มีไบต์หรือไบต์มีขนาดเท่ากับคำ (ในกรณีใดกรณีหนึ่งที่ฉันรู้ เป็น 32 บิต); ไม่ว่าด้วยวิธีใดมันก็ไม่ได้ 8 บิต ในทำนองเดียวกันมีสถาปัตยกรรมบิตที่แอดเดรสได้ในสถาปัตยกรรมเหล่านั้นเราสามารถยืนยันได้อีกครั้งว่าไบต์ไม่มีอยู่จริงหรือเราอาจโต้แย้งว่าไบต์เป็น 1 บิต ทั้งสองวิธีเป็นคำจำกัดความที่สมเหตุสมผล แต่ 8 บิตผิดอย่างแน่นอน
ในสถาปัตยกรรมวัตถุประสงค์ทั่วไปที่สำคัญ ๆ หนึ่งไบต์มี 8 บิต อย่างไรก็ตามไม่รับประกัน ยิ่งคุณอยู่ห่างไกลจากกระแสหลักและ / หรือจากซีพียูที่ใช้งานทั่วไปมากเท่าไรคุณก็จะยิ่งพบกับไบต์ที่ไม่ได้มีขนาด 8 บิต จนถึงขั้นตอนนี้ซอฟต์แวร์บางอย่างที่พกพาได้ทำให้สามารถกำหนดขนาดได้ เช่นรุ่นเก่าของ GCC มีมาโครที่เรียกว่าBITS_PER_BYTE
(หรืออะไรทำนองนั้น) ซึ่งกำหนดค่าขนาดของไบต์สำหรับสถาปัตยกรรมเฉพาะ ฉันเชื่อว่า NetBSD รุ่นเก่าบางรุ่นสามารถทำงานบนสถาปัตยกรรมที่ไม่ใช่ 8 บิตต่อไบต์ได้
หากคุณต้องการเน้นว่าคุณกำลังพูดถึงจำนวนบิตที่แน่นอน 8 บิตแทนที่จะเป็นจำนวนหน่วยความจำที่กำหนดแอดเดรสได้น้อยที่สุด แต่มีขนาดใหญ่พอสมควรคุณอาจใช้คำว่าoctetซึ่งเป็นตัวอย่างที่ใช้ใน RfC รุ่นใหม่หลายรุ่น
CHAR_BIT
(ที่พบในlimits.h
), ฉันไม่รู้BITS_PER_BYTE
เมื่อฉันเริ่มเขียนโปรแกรมในปี 1960 เรามี 48 บิตคำด้วย 6 บิตไบต์ - เครื่องพวกนั้นไม่ได้เรียกชื่อนั้นแล้วพวกเขาถูกเรียกตัวละคร จากนั้นฉันก็ใช้คอมพิวเตอร์โกเลมด้วยคำศัพท์ 75 บิตและ 15 บิต ต่อมา 6 บิตไบท์เป็นบรรทัดฐานจนกระทั่ง IBM ออกมาพร้อมกับ 360 และทุกวันนี้ไบต์มักเทียบเท่ากับ octet คือ 8 บิตของข้อมูล ฮาร์ดแวร์บางตัวมีบิตเพิ่มเติมสำหรับการตรวจจับข้อผิดพลาดและอาจเป็นการแก้ไขข้อผิดพลาด แต่ซอฟต์แวร์เหล่านี้ไม่สามารถเข้าถึงได้
ไบต์คือ 8 บิต
ในอดีตอันไกลโพ้นมีคำจำกัดความที่แตกต่างกันของคำว่าหน่วยความจำและของไบต์ คำแนะนำที่คลุมเครือนี้เป็นที่แพร่หลายหรือแพร่หลายในชีวิตวันนี้เป็นเท็จ
อย่างน้อยก็ตั้งแต่ช่วงปลายปี 1970 ไบต์นั้นมีอยู่ 8 บิต ประชากรจำนวนมากของคอมพิวเตอร์ที่ใช้ในบ้านและพีซีต่างก็ใช้ไบต์เป็นค่า 8 บิตในเอกสารประกอบอย่างไม่น่าเชื่อเช่นเดียวกับที่มีแผ่นข้อมูลและเอกสารทั้งหมดสำหรับฟลอปปีดิสก์ไดรฟ์ฮาร์ดดิสก์และ PROM / EPROM / EEPROM / Flash EPROM / ชิปหน่วยความจำ SRAM / SDRAM ที่ฉันอ่านในช่วงเวลานั้น (และฉันได้อ่านข้อตกลงส่วนตัวอย่างมากในช่วงเวลานั้น) อีเธอร์เน็ตและโปรโตคอลการสื่อสารอื่น ๆ สองอย่างโดดเด่นสำหรับฉันซึ่งผิดปกติในการพูดคุยเกี่ยวกับออคเต็ต
ความคลุมเครือของคำว่าไบต์เป็นสิ่งที่หายากและคลุมเครือ จำนวนน้อยมากของโปรแกรมเมอร์โปรแกรมเมอร์ออกแบบวิศวกรทดสอบพนักงานขายบริการหรือผู้ใช้งานเฉลี่ยในช่วง 30 ปีที่ผ่านมาหรือมากกว่านั้นจะคิดว่ามันหมายถึงสิ่งอื่นนอกเหนือจากค่า 8 บิตหากพวกเขาจำคำได้ทั้งหมด .
เมื่อฮาร์ดแวร์จัดการไบต์เช่นเมื่อเก็บไว้ในชิปหน่วยความจำหรือสื่อสารตามสายฮาร์ดแวร์อาจเพิ่มข้อมูลที่ซ้ำซ้อนลงในไบต์ ซึ่งอาจช่วยในการตรวจสอบข้อผิดพลาดของฮาร์ดแวร์ในภายหลังเพื่อให้สามารถรับรู้และทิ้งข้อมูลที่ไม่น่าเชื่อถือ (เช่นพาริตี้เช็คซัมซีอาร์ซี) หรืออาจอนุญาตให้แก้ไขข้อผิดพลาดในข้อมูลและกู้คืนข้อมูล (เช่น ECC) ไม่ว่าจะด้วยวิธีใดข้อมูลซ้ำซ้อนจะถูกยกเลิกเมื่อมีการเรียกหรือรับข้อมูลไบต์สำหรับการประมวลผลเพิ่มเติม ไบต์ยังคงเป็นค่ากลาง 8 บิตและข้อมูลซ้ำซ้อนยังคงเป็นข้อมูลซ้ำซ้อน
ก่อนกวดวิชาที่คุณอ้างอิงดูเหมือนจะค่อนข้างล้าสมัยและดูเหมือนว่าจะนำไปสู่โปรเซสเซอร์ x86 รุ่นเก่าโดยไม่ได้ระบุดังนั้นสิ่งต่าง ๆ มากมายที่คุณอ่านจะไม่สามารถเข้าใจได้ (ตัวอย่างเช่นถ้าคุณอ้างสิทธิ์ คำว่า WORD คือ 2 ไบต์คนจะไม่รู้ว่าคุณกำลังพูดถึงอะไรหรือพวกเขาจะรู้ว่าคุณได้รับการสอนจากโปรเซสเซอร์ x86 ที่ล้าสมัยมากและจะรู้ว่าจะต้องทำอะไร)
ไบต์คือจำนวนบิตที่บางคนตัดสินใจว่าควรเป็น มันอาจเป็น 8 บิตหรือ 9 บิตหรือ 16 บิตอะไรก็ได้ ในปี 2559 ในกรณีส่วนใหญ่ไบต์จะแปดบิต เพื่อความปลอดภัยคุณสามารถใช้คำว่า octet - octet อยู่เสมอแปดบิตเสมอ
ความสับสนที่แท้จริงที่นี่ทำให้สับสนสองคำถาม: 1. จำนวนบิตในไบต์คืออะไร? 2. ถ้าฉันต้องการถ่ายโอนหนึ่งไบต์จากที่หนึ่งไปอีกที่หนึ่งหรือถ้าฉันต้องการเก็บ byte โดยใช้วิธีการทางกายภาพที่ใช้งานได้จริงฉันจะทำอย่างไร คำถามที่สองมักเป็นที่สนใจของคุณยกเว้นคุณทำงานที่ บริษัท ที่ทำโมเด็มหรือฮาร์ดไดรฟ์หรือไดรฟ์ SSD ในทางปฏิบัติคุณมีความสนใจในคำถามแรกและสำหรับคำถามที่สองคุณพูดว่า "ดีมีคนคอยดูแลอยู่"
พาริตี้บิตที่ถูกกล่าวถึงเป็นกลไกดั้งเดิมที่ช่วยตรวจจับว่าเมื่อไบต์ถูกเก็บไว้ในหน่วยความจำและหลังจากนั้นไบต์จะถูกอ่านหน่วยความจำจะเปลี่ยนไปโดยบังเอิญ มันไม่ค่อยดีนักเนื่องจากไม่พบว่ามีการเปลี่ยนแปลงสองบิตดังนั้นการเปลี่ยนแปลงจึงไม่ถูกตรวจพบและจะไม่สามารถกู้คืนจากปัญหาได้เนื่องจากไม่มีวิธีการค้นหาว่า 8 บิตใดเปลี่ยนแปลงไป หรือแม้ว่าบิตพาริตีได้เปลี่ยนไป
พาริตี้บิตไม่ได้ใช้ในรูปแบบดั้งเดิม ข้อมูลที่ถูกจัดเก็บอย่างถาวรมักจะได้รับการปกป้องด้วยวิธีที่ซับซ้อนกว่าตัวอย่างเช่นการเพิ่มการตรวจสอบแบบ 32 บิตหรือนานกว่าไปยังบล็อกขนาด 1024 ไบต์ซึ่งใช้พื้นที่พิเศษน้อยกว่ามาก (0.4% ในตัวอย่างนี้แทน 12.5%) มีโอกาสน้อยที่จะไม่ทราบว่ามีบางอย่างผิดปกติ
WORD
s ซึ่ง ... kinda พิสูจน์จุดของคุณเนื่องจากชื่อประเภท WinAPI จำนวนมากล้าสมัย แต่เก็บไว้เพื่อความเข้ากันได้ย้อนหลัง xP
แม้จะมีคำตอบที่ยอดเยี่ยมจริง ๆ ที่ให้มาที่นี่ฉันประหลาดใจที่ไม่มีใครชี้ว่าแพริตีบิตหรือบิตการแก้ไขข้อผิดพลาดโดยนิยาม 'เมตาดาต้า' และไม่ได้เป็นส่วนหนึ่งของไบท์เอง
ไบต์มี 8 บิต !
ในการใช้งานที่ทันสมัยไบต์คือ 8 บิตระยะเวลา (แม้ว่าจะมีคำจำกัดความอื่น ๆ ในอดีต) ในทางกลับกันคำว่าข้อมูลเป็นสิ่งที่ฮาร์ดแวร์ที่เป็นปัญหาจัดการเป็นหน่วยอะตอม - อาจเป็น 8 บิต, 9 บิต, 10 บิต, 12 บิต, 16 บิต, 20 บิต, 24 บิต, 24 บิต, 32 บิต ฯลฯ คอมพิวเตอร์หลายเครื่อง ระบบในช่วงหลายปีที่ผ่านมามีขนาดต่างกันทุกคำ
เมื่อต้องการใช้ระบบหน่วยความจำหรือโปรโตคอลการส่งจะเป็นประโยชน์ในการเพิ่มการตรวจจับ / แก้ไขข้อผิดพลาดซึ่งเกี่ยวข้องกับบิตเพิ่มเติม พวกเขาไม่ได้ทำสำหรับไบต์ 9 บิตเพราะตามที่ระบุไว้ข้างต้นไบต์คือ 8 บิต
รูปแบบต่างๆเพิ่มการตรวจจับข้อผิดพลาดและ / หรือการแก้ไขในรูปแบบต่างๆ
การใช้พาริตีโดยทั่วไปคือการเพิ่มบิตพิเศษลงในคำส่งเพื่อให้ผู้รับสามารถตรวจพบข้อผิดพลาดเพียงเล็กน้อย
รูปแบบที่สามารถให้การแก้ไขข้อผิดพลาดแบบบิตเดียวเกี่ยวข้องกับการเพิ่ม 4 บิต ECC ต่อคำข้อมูล 32 บิต นี่เพิ่งเกิดขึ้นจะเท่ากับเลขคณิต 1 บิตต่อไบต์ แต่มันไม่สามารถ / ไม่ทำงาน หนึ่งคำข้อมูล 36 บิตสามารถนำข้อมูลที่เพียงพอเพื่อกู้คืนจากข้อผิดพลาดบิตเดียวสำหรับพื้นที่ข้อมูล 32 บิต
8 บิต ภายในซีพียูและคีย์บอร์ดมันคือ 9 และ 11 บิต ข้อมูลผู้ใช้จะถูกแสดงใน 8 บิตแม้ว่า ปุ่มบนคีย์บอร์ดส่งเพลงซึ่งแบ่งเป็น 11 บิต 1 บิตเริ่มต้น, 1 บิตสิ้นสุด, 1 พาริตี้บิตและ 8 บิตแทนการกดปุ่ม