ไบต์มี 8 บิตหรือ 9 หรือไม่


56

ฉันอ่านในการสอนการเขียนโปรแกรมการชุมนุมนี้ว่า 8 บิตใช้สำหรับข้อมูลในขณะที่ 1 บิตสำหรับพาริตี้ซึ่งใช้สำหรับตรวจจับข้อผิดพลาดพาริตี้ (เกิดจากความผิดพลาดของฮาร์ดแวร์หรือการรบกวนทางไฟฟ้า)

มันเป็นเรื่องจริงเหรอ?


5
ดูcs.stackexchange.com/a/19851/584สำหรับการอภิปรายเกี่ยวกับสิ่งที่byteสามารถ
AProgrammer

63
บทความนั้นเต็มไปด้วยเรื่องไร้สาระและคุณควรละเว้น
David Schwartz

12
หากคุณต้องการอวดความรู้แจ้งเพียงเรียกพวกเขาว่า "octets" บทความนั้นเขียนด้วยตัวประมวลผลที่เฉพาะเจาะจงในใจ (อันหนึ่งที่ต้องเก็บบิตความเท่าเทียมกันใน ROM ด้วยเหตุผลบางอย่าง ... ) หรือขาดความสามารถ ตัวอย่างเช่น Microchip PIC ใช้ความยาวของคำ 14 บิต หน่วยความจำโปรแกรมทั้งหมดถูกจัดระเบียบในอาเรย์ N x 14 บิต
Nick T

13
@NickT: พวกเขาไม่เหมือนกัน อ็อกเท็ตคือ 8 บิตเสมอไบต์อาจเป็นอะไรก็ได้
Jörg W Mittag

4
บทความอาจอ้างอิงกลไกการแก้ไขหน่วยความจำที่ใช้ในพีซี IBM รุ่นแรกบางเครื่อง แต่ระบุว่า "ไบต์คือข้อมูล 8 บิต + ความเท่าเทียมกัน 1 บิต" เป็นเรื่องไร้สาระที่สุด ตัวอย่างเช่นซีดีรอมมักจะใช้กลไกการแก้ไขข้อผิดพลาดที่โลภมากขึ้น - ซีดีเพลงทั่วไปจะใช้ 8 ไบต์ต่อ 24 ไบต์ของข้อมูลเสียง แต่ส่วนที่สำคัญที่สุดคือการที่คุณไม่สนใจ เลย มันเป็นเอกสิทธิ์ของกลไกการจัดเก็บหน่วยความจำจริง - CPU ไม่สนใจรหัสของคุณไม่สนใจ
Luaan

คำตอบ:


79

ไบต์ของข้อมูลคือแปดบิตอาจมีบิตเพิ่มเติมต่อไบต์ของข้อมูลที่ใช้ในระบบปฏิบัติการหรือแม้แต่ระดับฮาร์ดแวร์สำหรับการตรวจสอบข้อผิดพลาด (บิตพาริตีหรือแม้แต่รูปแบบการตรวจจับข้อผิดพลาดขั้นสูง) แต่ข้อมูลแปด บิตและแพริตีบิตใด ๆ มักจะมองไม่เห็นกับซอฟต์แวร์ ไบต์ถูกทำให้เป็นมาตรฐานเพื่อหมายถึง 'แปดบิตของข้อมูล' ข้อความไม่ผิดที่บอกว่าอาจมีบิตเพิ่มเติมเพื่อเก็บข้อมูลจำนวนหนึ่งมากกว่าแปดบิตของข้อมูล แต่โดยทั่วไปจะไม่ถือว่าเป็นส่วนหนึ่งของ byte ต่อ se ข้อความตัวเองชี้ไปที่ข้อเท็จจริงนี้

คุณสามารถดูได้ในบทต่อไปของบทช่วยสอน:

Doubleword: a 4-byte (32 bit) data item

4 * 8 = 32 อาจใช้เวลาถึง 36 บิตในระบบ แต่สำหรับจุดประสงค์และจุดประสงค์ของคุณมีเพียง 32 บิต


5
ถ้าฮาร์ดแวร์ใช้การตรวจจับข้อผิดพลาดมันอาจจะทำเช่นนั้นด้วยหน่วยความจำขนาดใหญ่กว่าหนึ่งไบต์เช่นภาค 512- ไบต์หรือดังนั้น ... ด้วยวิธีนี้คุณสามารถลดค่าใช้จ่ายของหน่วยความจำเพิ่มเติมที่จำเป็น เพื่อชี้แจง: ถึงแม้จะมีการแก้ไขข้อผิดพลาดแล้วฮาร์ดแวร์ยังคงใช้ 8 บิตต่อไบต์บวกกับบิตบางส่วนสำหรับข้อมูล "แต่ละอัน" ซึ่งอาจใหญ่กว่าไบต์เดียวมาก
Bakuriu

11
โปรดทราบว่ามีระบบที่มีไบต์ที่ไม่สามารถมองเห็นได้ด้วยซอฟต์แวร์ ดูแพลตฟอร์มใดมีสิ่งอื่นที่ไม่ใช่ถ่าน 8 บิต คำถามที่ StackOverflow
Ruslan

3
ใช่พวกเขามีอยู่จริง แม้ว่าลิงก์นั้นจะพูดถึงตัวอักษรที่ไม่ใช่ 8 บิต ตามที่เป็นอยู่: byte ใช้เพื่ออ้างถึงจำนวนบิตที่ระบบที่กำหนดใช้เพื่อเก็บ 'char' ซึ่งต่ำถึงหกบิต แต่ IIRC นั้นเป็นมาตรฐานในข้อกำหนด IEC-80000 ที่ไบต์คือ 8 บิต เมื่อคุณย้ายออกจากระบบหลักคุณจะพบสิ่งแปลก ๆ แน่นอนและมาตรฐานไม่ใช่กฎหมาย
JustAnotherSoul

3
@ JustAnotherSoul: และมีมาตรฐานการแข่งขันที่กำหนดไบต์เป็น "อย่างน้อย 8 บิต" หรือในวิธีอื่น เป็นที่น่าสนใจที่จะเห็นว่าทศวรรษต่อมาคำจำกัดความของการเปลี่ยนแปลงไบต์ในจิตใจของผู้คน ย้อนกลับไปในช่วงเวลาของความหลากหลายของสถาปัตยกรรมที่แตกต่างกันไบต์เป็นเพียงหน่วยที่เล็กที่สุดของสถาปัตยกรรมของคุณ (ดูตัวอย่าง PDP ต่างๆ) นี่คือเหตุผลที่ในการกำเนิดของอินเทอร์เน็ตคำว่าoctetถูกใช้เพื่ออธิบายข้อมูลบน wire เนื่องจากbyteไม่ใช่คำสากลสำหรับข้อมูลขนาด 8 บิต
PlasmaHH

2
@ JustAnotherSoul โปรดทราบว่าcharใน C (ซึ่งเป็นสิ่งที่ลิงค์เกี่ยวกับ) เป็นหน่วยที่เล็กที่สุดของแอดเดรสหน่วยความจำ มันเป็นเพียงแค่เรียกว่าถ่านแต่ C มาตรฐานทำให้มันตรงกันไบต์
Ruslan

48

โดยปกติแล้วไบต์สามารถมีขนาดใดก็ได้และเป็นหน่วยความจำที่สามารถกำหนดแอดเดรสที่เล็กที่สุดได้ วันนี้ 8 บิตไบต์ได้รับมาตรฐานมากสำหรับซอฟต์แวร์ ดังที่ JustAnotherSoul กล่าวฮาร์ดแวร์อาจเก็บบิตมากกว่า 8 บิตของข้อมูล

หากคุณกำลังทำงานกับอุปกรณ์ตรรกะที่ตั้งโปรแกรมได้เช่น FPGAs คุณอาจเห็นว่าหน่วยความจำภายในของพวกเขามักจะสามารถระบุตำแหน่งได้ว่าเป็นบิตขนาด 9 บิตและในฐานะผู้เขียน HDL คุณสามารถใช้บิตที่ 9 เพื่อตรวจสอบข้อผิดพลาด ของข้อมูลต่อ "ไบต์" เมื่อซื้อชิปหน่วยความจำสำหรับฮาร์ดแวร์ที่กำหนดเองโดยทั่วไปคุณมีหน่วยที่สามารถเลือกได้ 8 หรือ 9 บิต (หรือ 16/18, 32/36 ฯลฯ ) แล้วมันขึ้นอยู่กับคุณว่าคุณมี "ไบต์" 9 บิตหรือไม่ คุณทำกับบิตที่ 9 ถ้าคุณเลือกที่จะมี


10
โดยทั่วไปเมื่อมีกลุ่มของข้อมูลที่มีเหตุผลในหน่วยเดียว แต่มีมากกว่า / น้อยกว่า 8 บิตจะเรียกว่า "คำ" ตัวอย่างเช่นโปรเซสเซอร์บางตัวใช้คำแนะนำแบบ 40 บิต
Devsman

3
+1 บังเอิญมีสถาปัตยกรรมที่มีทั้ง "ตัวชี้บิต" และ "ตัวชี้ไบต์" ในสถาปัตยกรรมดังกล่าวไบต์ไม่ได้ใช้เทคนิค "หน่วยความจำที่อยู่ได้น้อยที่สุด" (เนื่องจากคุณสามารถระบุแต่ละบิตได้อย่างอิสระ) แม้ว่ามันจะยากที่จะพูดอย่างชัดเจนว่ามันคืออะไร ฉันเดาว่ามันเป็น "ฉันรู้เมื่อฉันเห็นมัน" :-P
ruakh

18
"Octet" เป็นคำที่ใช้ตามประเพณีหมายความว่า "ฉันเรียกมันว่า byte แต่จริงๆแล้วฉันหมายถึง 8 บิต" สำหรับโปรโตคอลการสื่อสารที่หลากหลายระหว่างระบบที่อาจมีขนาดไบต์ที่แตกต่างกัน แต่ทุกวันนี้การใช้ไบต์เพื่อหมายถึงอะไรก็ตาม แต่ 8 บิตนั้นเป็นสมัย
wnoise

@Devsman ไม่จำเป็น ตัวอย่างเช่นชิป x86 มี 32 คำและ 8 บิตเช่น ไบต์คือขนาดที่เล็กที่สุดที่สามารถกำหนดแอดเดรสได้ คำนี้มีความหมายชัดเจนขึ้นเล็กน้อย แต่มีแนวโน้มที่จะเป็นขนาดที่สะดวกที่สุดในการทำงานกับ; เช่นความยาวตัวถูกดำเนินการที่คาดหวังของคำแนะนำส่วนใหญ่
เรย์

สิ่งนี้ควรถูกทำเครื่องหมายว่าเป็นคำตอบที่ถูกต้องมันถูกต้องมากกว่า
awiebe

32

ข้อความนั้นเป็นถ้อยคำไม่ดีอย่างยิ่ง เขาเกือบจะพูดถึงRAM ECC (รหัสแก้ไขข้อผิดพลาด)อย่างแน่นอน

ECC ram โดยทั่วไปจะเก็บข้อมูล 8-bit โดยใช้ 9-bits บิตต่อไบต์พิเศษถูกใช้เพื่อเก็บรหัสการแก้ไขข้อผิดพลาด

ECC กับไม่ใช่ ECC (ในทั้งสองกรณีทุกไบต์จะกระจายไปทั่วทุกชิปรูปภาพที่ได้รับความอนุเคราะห์จากPuget Systems )

นี่เป็นสิ่งที่ผู้ใช้ฮาร์ดแวร์มองไม่เห็นอย่างสมบูรณ์ ในทั้งสองกรณีซอฟต์แวร์ที่ใช้ RAM นี้จะเห็น 8 บิตต่อไบต์


นอกเหนือจาก: รหัสแก้ไขข้อผิดพลาดใน RAM มักจะไม่ได้ 1 บิตต่อไบต์; พวกเขาแทน 8 บิตต่อ 8 ไบต์ สิ่งนี้มีค่าใช้จ่ายของพื้นที่เท่ากัน แต่มีข้อดีเพิ่มเติมบางประการ ดูSECDEDสำหรับข้อมูลเพิ่มเติม


12
Parity RAM และ ECC RAM นั้นต่างกัน Parity RAM เก็บหนึ่งบิตเพิ่มเติมต่อโดเมนข้อผิดพลาดสามารถตรวจพบข้อผิดพลาดแบบบิตเดียวและไม่มีข้อผิดพลาดแบบสองบิตและไม่สามารถแก้ไขอะไรได้ ECC เก็บจำนวนบิตเพิ่มเติมต่อโดเมนข้อผิดพลาดจำนวนหนึ่งสามารถตรวจจับและแก้ไขข้อผิดพลาดแบบบิตเดียวทั้งหมดสามารถตรวจจับได้ แต่ไม่สามารถแก้ไขข้อผิดพลาดแบบสองบิตทั้งหมดและสามารถตรวจจับข้อผิดพลาดที่ใหญ่กว่าได้ Parity RAM เป็นของหายากในปัจจุบันซึ่งถูกแทนที่ด้วย ECC RAM เกือบทั้งหมด
ทำเครื่องหมาย

1
@ Mark: ฉันพูดเป็นนัย ๆ ว่าในย่อหน้าสุดท้ายของฉันมีรายละเอียดเพิ่มเติมในลิงค์ RAM โดยทั่วไปไม่มีอยู่จริงในทุกวันนี้เนื่องจากรหัสการแก้ไขข้อผิดพลาด (72,64) มีค่าใช้จ่ายเช่นเดียวกับรหัสพาริตี้ (9,8)
BlueRaja - Danny Pflughoeft

7
ในขณะที่คุณบอกกล่าวคุณยังระบุสิ่งต่าง ๆ ที่ทำให้ไม่ชัดเจน / สับสน ECC RAM ไม่ "เก็บข้อมูล 8-bit โดยใช้ 9-bits" การระบุว่าบอกเป็นนัยว่าคุณสามารถทำ ECC ได้ 8 บิตโดยใช้ 9 บิตซึ่งไม่สามารถทำได้ สำหรับข้อมูลที่ไม่ต่อเนื่อง 8 บิต 1 บิตเพิ่มเติมเพียงพอที่จะตรวจจับได้ไม่ถูกต้องและมีข้อผิดพลาดบิตเดียว ECC ใช้จำนวนบิตหรือไบต์ที่มากขึ้นเพื่อเก็บข้อมูลให้เพียงพอเพื่อแก้ไขข้อผิดพลาดสำหรับกลุ่มข้อมูลซึ่งมักจะมีขนาดใหญ่กว่าไบต์เดียว ในขณะนี้อาจเฉลี่ยบิตพิเศษต่อ 8 บิต แต่ก็ไม่สามารถแยกย่อยเพื่อเชื่อมโยงเพียง 1 บิตกับแต่ละ 8 บิต
Makyen

มีรูปแบบ 36 บิต (32 บิตคำ + 4 บิต ECC) ซึ่งอนุญาตให้แก้ไขข้อผิดพลาดบิตเดียวและตรวจจับข้อผิดพลาดสองบิตคือ ในขณะที่คุณสามารถแบ่งข้อมูลได้เป็น 8 บิตบิต + 1 ECC บิต แต่ก็ไม่สามารถ / ไม่ทำงาน ต้องการ ECC แบบเต็ม 4 บิตซึ่งครอบคลุมบิตข้อมูล 32 บิต
Zenilogix

@Zenilogix และคนอื่น ๆ ที่ทำซ้ำในสิ่งเดียวกัน: ฉันเข้าใจดีว่า ECC ทำงานอย่างไรและไม่มีอะไรที่ฉันพูดไม่ถูกต้อง ฉันไม่เคยอ้างสิทธิ์ ECC 8 บิตสามารถทำได้ด้วย 9 บิตฉันกล่าวว่า ECC RAM ใช้หน่วยความจำ 9 บิตต่อไบต์ วิธีการทำงานของ ECC นั้นเกินขอบเขตสำหรับคำถามนี้ซึ่งเป็นเหตุผลว่าทำไมฉันจึงทิ้งรายละเอียดไว้ในส่วนนอกเหนือจากลิงก์ กรุณาหยุดความคิดเห็นอวดความรู้ทั้งหมด
BlueRaja - Danny Pflughoeft

16

โดยทั่วไปแล้วคำตอบสั้น ๆ ก็คือไบต์คือ 8 บิต (บางครั้งถึงจุดที่ไม่ถูกต้อง) แต่เป็นคำนิยามที่คนส่วนใหญ่ (รวมถึงโปรแกรมเมอร์จำนวนมาก) มีความคุ้นเคยและคำจำกัดความที่เกือบทุกคนเริ่มต้น (โดยไม่คำนึงถึงจำนวนไบต์ที่แตกต่างกัน) ฉันต้องทำงานด้วย)

โดยเฉพาะอย่างยิ่งไบต์เป็นหน่วยความจำที่เล็กที่สุดที่อยู่ได้สำหรับสถาปัตยกรรมที่กำหนดและโดยทั่วไปจะมีขนาดใหญ่พอที่จะเก็บอักขระข้อความเดียว ในสถาปัตยกรรมสมัยใหม่ส่วนใหญ่ไบต์จะถูกกำหนดเป็น 8 บิต ISO / IEC 80000-13 ยังระบุว่าไบต์คือ 8 บิตเช่นเดียวกับฉันทามติที่เป็นที่นิยม (หมายความว่าถ้าคุณกำลังพูดถึงพูดว่า 9- บิตไบต์คุณจะพบปัญหามากเว้นแต่ว่าคุณจะได้อย่างชัดเจน ระบุว่าคุณไม่ได้หมายถึงไบต์ปกติ)

อย่างไรก็ตามมีข้อยกเว้นสำหรับกฎนี้ ตัวอย่างเช่น:

ดังนั้นในกรณีส่วนใหญ่ไบต์โดยทั่วไปจะเป็น 8 บิต หากไม่เป็นอาจเป็น 9 บิตและอาจเป็นส่วนหนึ่งของคำ 36 บิตหรือไม่ก็ได้


8

โปรดทราบว่าไบต์นั้นไม่ได้ถูกกำหนดอย่างชัดเจนหากไม่มีบริบท เท่าที่เกี่ยวข้องกับสถาปัตยกรรมคอมพิวเตอร์คุณสามารถสันนิษฐานได้ว่าไบต์เป็น 8 บิตอย่างน้อยสำหรับสถาปัตยกรรมสมัยใหม่ นี่คือมาตรฐานส่วนใหญ่โดยการเขียนโปรแกรมภาษาเช่น C ซึ่งจำเป็นต้องมีไบต์อย่างน้อย 8 บิต แต่ไม่ได้ให้การรับประกันใด ๆ สำหรับไบต์ขนาดใหญ่ทำให้ 8 บิตต่อไบต์เป็นสมมติฐานที่ปลอดภัยเท่านั้น

มีคอมพิวเตอร์ที่มียูนิตที่กำหนดแอดเดรสได้มากกว่า 8 บิต (โดยปกติคือ 16 หรือ 32) แต่หน่วยเหล่านั้นมักจะเรียกว่าคำเครื่องไม่ใช่ไบต์ ตัวอย่างเช่นโฆษณาที่มีคำ 32K 32- บิตแรมจะโฆษณาว่ามี 128 KB หรือ RAM ไม่ใช่ 32 KB

สิ่งที่ไม่ได้กำหนดไว้อย่างดีเมื่อมันมาถึงมาตรฐานการสื่อสาร ASCIIยังคงใช้กันอย่างแพร่หลายและมีขนาด 7 บิต (ซึ่งมีขนาดพอดีกับขนาด 8 บิตในคอมพิวเตอร์) ตัวรับส่งสัญญาณ UART ยังคงผลิตเพื่อให้มีขนาดไบต์ที่กำหนดค่าได้ (โดยทั่วไปคุณจะต้องเลือกอย่างน้อยระหว่าง 6, 7 และ 8 บิตต่อไบต์ แต่ 5 และ 9 ไม่เคยได้ยินมาก่อน)


6

ไบต์มักถูกกำหนดให้เป็นหน่วยที่เล็กที่สุดที่สามารถกำหนดแอดเดรสของหน่วยความจำได้ มันสามารถมีขนาดใดก็ได้ มีสถาปัตยกรรมที่มีขนาดไบต์ทุกที่ระหว่าง 6 และ 9 บิตอาจยิ่งใหญ่กว่า นอกจากนี้ยังมีสถาปัตยกรรมที่หน่วยเดียวที่สามารถกำหนดแอดเดรสได้คือขนาดของรถบัสในสถาปัตยกรรมดังกล่าวเราสามารถพูดได้ว่าพวกเขาไม่มีไบต์หรือไบต์มีขนาดเท่ากับคำ (ในกรณีใดกรณีหนึ่งที่ฉันรู้ เป็น 32 บิต); ไม่ว่าด้วยวิธีใดมันก็ไม่ได้ 8 บิต ในทำนองเดียวกันมีสถาปัตยกรรมบิตที่แอดเดรสได้ในสถาปัตยกรรมเหล่านั้นเราสามารถยืนยันได้อีกครั้งว่าไบต์ไม่มีอยู่จริงหรือเราอาจโต้แย้งว่าไบต์เป็น 1 บิต ทั้งสองวิธีเป็นคำจำกัดความที่สมเหตุสมผล แต่ 8 บิตผิดอย่างแน่นอน

ในสถาปัตยกรรมวัตถุประสงค์ทั่วไปที่สำคัญ ๆ หนึ่งไบต์มี 8 บิต อย่างไรก็ตามไม่รับประกัน ยิ่งคุณอยู่ห่างไกลจากกระแสหลักและ / หรือจากซีพียูที่ใช้งานทั่วไปมากเท่าไรคุณก็จะยิ่งพบกับไบต์ที่ไม่ได้มีขนาด 8 บิต จนถึงขั้นตอนนี้ซอฟต์แวร์บางอย่างที่พกพาได้ทำให้สามารถกำหนดขนาดได้ เช่นรุ่นเก่าของ GCC มีมาโครที่เรียกว่าBITS_PER_BYTE(หรืออะไรทำนองนั้น) ซึ่งกำหนดค่าขนาดของไบต์สำหรับสถาปัตยกรรมเฉพาะ ฉันเชื่อว่า NetBSD รุ่นเก่าบางรุ่นสามารถทำงานบนสถาปัตยกรรมที่ไม่ใช่ 8 บิตต่อไบต์ได้

หากคุณต้องการเน้นว่าคุณกำลังพูดถึงจำนวนบิตที่แน่นอน 8 บิตแทนที่จะเป็นจำนวนหน่วยความจำที่กำหนดแอดเดรสได้น้อยที่สุด แต่มีขนาดใหญ่พอสมควรคุณอาจใช้คำว่าoctetซึ่งเป็นตัวอย่างที่ใช้ใน RfC รุ่นใหม่หลายรุ่น


2
Standard C และ C ++ มีมาโครที่กำหนดไว้ล่วงหน้าCHAR_BIT(ที่พบในlimits.h), ฉันไม่รู้BITS_PER_BYTE
njuffa

3

เมื่อฉันเริ่มเขียนโปรแกรมในปี 1960 เรามี 48 บิตคำด้วย 6 บิตไบต์ - เครื่องพวกนั้นไม่ได้เรียกชื่อนั้นแล้วพวกเขาถูกเรียกตัวละคร จากนั้นฉันก็ใช้คอมพิวเตอร์โกเลมด้วยคำศัพท์ 75 บิตและ 15 บิต ต่อมา 6 บิตไบท์เป็นบรรทัดฐานจนกระทั่ง IBM ออกมาพร้อมกับ 360 และทุกวันนี้ไบต์มักเทียบเท่ากับ octet คือ 8 บิตของข้อมูล ฮาร์ดแวร์บางตัวมีบิตเพิ่มเติมสำหรับการตรวจจับข้อผิดพลาดและอาจเป็นการแก้ไขข้อผิดพลาด แต่ซอฟต์แวร์เหล่านี้ไม่สามารถเข้าถึงได้


3

ไบต์คือ 8 บิต

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

อย่างน้อยก็ตั้งแต่ช่วงปลายปี 1970 ไบต์นั้นมีอยู่ 8 บิต ประชากรจำนวนมากของคอมพิวเตอร์ที่ใช้ในบ้านและพีซีต่างก็ใช้ไบต์เป็นค่า 8 บิตในเอกสารประกอบอย่างไม่น่าเชื่อเช่นเดียวกับที่มีแผ่นข้อมูลและเอกสารทั้งหมดสำหรับฟลอปปีดิสก์ไดรฟ์ฮาร์ดดิสก์และ PROM / EPROM / EEPROM / Flash EPROM / ชิปหน่วยความจำ SRAM / SDRAM ที่ฉันอ่านในช่วงเวลานั้น (และฉันได้อ่านข้อตกลงส่วนตัวอย่างมากในช่วงเวลานั้น) อีเธอร์เน็ตและโปรโตคอลการสื่อสารอื่น ๆ สองอย่างโดดเด่นสำหรับฉันซึ่งผิดปกติในการพูดคุยเกี่ยวกับออคเต็ต

ความคลุมเครือของคำว่าไบต์เป็นสิ่งที่หายากและคลุมเครือ จำนวนน้อยมากของโปรแกรมเมอร์โปรแกรมเมอร์ออกแบบวิศวกรทดสอบพนักงานขายบริการหรือผู้ใช้งานเฉลี่ยในช่วง 30 ปีที่ผ่านมาหรือมากกว่านั้นจะคิดว่ามันหมายถึงสิ่งอื่นนอกเหนือจากค่า 8 บิตหากพวกเขาจำคำได้ทั้งหมด .

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


2

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

ไบต์คือจำนวนบิตที่บางคนตัดสินใจว่าควรเป็น มันอาจเป็น 8 บิตหรือ 9 บิตหรือ 16 บิตอะไรก็ได้ ในปี 2559 ในกรณีส่วนใหญ่ไบต์จะแปดบิต เพื่อความปลอดภัยคุณสามารถใช้คำว่า octet - octet อยู่เสมอแปดบิตเสมอ

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

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

พาริตี้บิตไม่ได้ใช้ในรูปแบบดั้งเดิม ข้อมูลที่ถูกจัดเก็บอย่างถาวรมักจะได้รับการปกป้องด้วยวิธีที่ซับซ้อนกว่าตัวอย่างเช่นการเพิ่มการตรวจสอบแบบ 32 บิตหรือนานกว่าไปยังบล็อกขนาด 1024 ไบต์ซึ่งใช้พื้นที่พิเศษน้อยกว่ามาก (0.4% ในตัวอย่างนี้แทน 12.5%) มีโอกาสน้อยที่จะไม่ทราบว่ามีบางอย่างผิดปกติ


ล้าสมัยจริง ๆ : วรรค 16 ไบต์ "" ไม่ได้เป็นหน่วยความจำที่มีความหมายตั้งแต่สวิตช์จากโหมดจริงและการแบ่งส่วนที่อยู่
ทำเครื่องหมาย

โดยส่วนตัวแล้วฉันจะถือว่า "WinAPI" เมื่อมีคนพูดถึง 2-byte WORDs ซึ่ง ... kinda พิสูจน์จุดของคุณเนื่องจากชื่อประเภท WinAPI จำนวนมากล้าสมัย แต่เก็บไว้เพื่อความเข้ากันได้ย้อนหลัง xP
Justin เวลา

1

แม้จะมีคำตอบที่ยอดเยี่ยมจริง ๆ ที่ให้มาที่นี่ฉันประหลาดใจที่ไม่มีใครชี้ว่าแพริตีบิตหรือบิตการแก้ไขข้อผิดพลาดโดยนิยาม 'เมตาดาต้า' และไม่ได้เป็นส่วนหนึ่งของไบท์เอง

ไบต์มี 8 บิต !


0

ในการใช้งานที่ทันสมัยไบต์คือ 8 บิตระยะเวลา (แม้ว่าจะมีคำจำกัดความอื่น ๆ ในอดีต) ในทางกลับกันคำว่าข้อมูลเป็นสิ่งที่ฮาร์ดแวร์ที่เป็นปัญหาจัดการเป็นหน่วยอะตอม - อาจเป็น 8 บิต, 9 บิต, 10 บิต, 12 บิต, 16 บิต, 20 บิต, 24 บิต, 24 บิต, 32 บิต ฯลฯ คอมพิวเตอร์หลายเครื่อง ระบบในช่วงหลายปีที่ผ่านมามีขนาดต่างกันทุกคำ

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

รูปแบบต่างๆเพิ่มการตรวจจับข้อผิดพลาดและ / หรือการแก้ไขในรูปแบบต่างๆ

การใช้พาริตีโดยทั่วไปคือการเพิ่มบิตพิเศษลงในคำส่งเพื่อให้ผู้รับสามารถตรวจพบข้อผิดพลาดเพียงเล็กน้อย

รูปแบบที่สามารถให้การแก้ไขข้อผิดพลาดแบบบิตเดียวเกี่ยวข้องกับการเพิ่ม 4 บิต ECC ต่อคำข้อมูล 32 บิต นี่เพิ่งเกิดขึ้นจะเท่ากับเลขคณิต 1 บิตต่อไบต์ แต่มันไม่สามารถ / ไม่ทำงาน หนึ่งคำข้อมูล 36 บิตสามารถนำข้อมูลที่เพียงพอเพื่อกู้คืนจากข้อผิดพลาดบิตเดียวสำหรับพื้นที่ข้อมูล 32 บิต


0

8 บิต ภายในซีพียูและคีย์บอร์ดมันคือ 9 และ 11 บิต ข้อมูลผู้ใช้จะถูกแสดงใน 8 บิตแม้ว่า ปุ่มบนคีย์บอร์ดส่งเพลงซึ่งแบ่งเป็น 11 บิต 1 บิตเริ่มต้น, 1 บิตสิ้นสุด, 1 พาริตี้บิตและ 8 บิตแทนการกดปุ่ม


2
นี่ตอบคำถามหรือไม่ คุณหมายถึงความยาวที่แตกต่างกันสำหรับไบต์ในซีพียูและไบต์ในแป้นพิมพ์? "ร้องเพลง" ควรเป็น "สตริง" หรือ "สตรีม" หรือไม่
Apass.Jack

ดูเหมือนว่าคุณกำลังพูดถึงโปรโตคอลลวดรวมถึงข้อมูลการวางกรอบไม่ใช่ข้อมูลจริง
Peter Cordes

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