ฉันจะสอนคนกลุ่มเล็ก ๆ เกี่ยวกับระบบเลขในการคำนวณและสงสัยว่ามีกี่บิตต่อหลักในระบบทศนิยมเช่น:
- Hex (ฐาน 16) - 4 บิต
- Octal (ฐาน 8) - 3 บิต
- ไบนารี (ฐาน 2) - 1 บิต
- ทศนิยม (ฐาน 10) -?
ฉันจะสอนคนกลุ่มเล็ก ๆ เกี่ยวกับระบบเลขในการคำนวณและสงสัยว่ามีกี่บิตต่อหลักในระบบทศนิยมเช่น:
คำตอบ:
สิ่งที่คุณกำลังมองหาคือลอการิทึมแบบยึด 2 ค่าจาก 10 ซึ่งเป็นจำนวนอตรรกยะประมาณ 3.32192809489 ....
ความจริงที่ว่าคุณไม่สามารถใช้จำนวนเต็มบิตสำหรับเลขทศนิยมนั้นเป็นสาเหตุของสาเหตุที่เศษส่วนจำนวนมากที่ง่ายต่อการแสดงในระบบทศนิยม (เช่น 1/5 หรือ 0.2) เป็นไปไม่ได้ (ไม่ยาก: จริงๆ เป็นไปไม่ได้) ที่จะแสดงเป็นไบนารี่ สิ่งนี้มีความสำคัญเมื่อทำการประเมินข้อผิดพลาดในการปัดเศษในเลขทศนิยม
กล่าวอีกนัยหนึ่งจำนวนข้อมูลที่มีอยู่ในระบบเลขหลักเดียว
สำหรับฐาน 2, ฐาน 4, ฐาน 8, ฐาน 16 และฐาน2 Nอื่น ๆคำตอบนั้นชัดเจนเพราะในฐาน 2 Nแต่ละหลักสามารถแสดงด้วยตัวเลข N หลักทุกประการ
คุณได้รับNอย่างไร2 N ทีนี้คุณใช้ลอการิทึม 2 ตัวซึ่งเป็นค่าผกผันของการยกกำลัง
ลอการิทึมที่ใช้ K สำหรับตัวเลขที่ไม่ใช่พลังของ K ไม่ใช่ตัวเลขที่สำคัญ โดยเฉพาะอย่างยิ่ง:
ตัวเลขนี้อาจดูสับสน แต่จริงๆแล้วมันมีประโยชน์บางอย่าง ตัวอย่างเช่นมันเป็นเอนโทรปีของตัวเลขทศนิยมเดียว
อย่างไรก็ตามสำหรับกรณีของคุณฉันไม่คิดว่าคุณค่านี้มีประโยชน์ใด ๆ @ คำตอบของคริสเตียนทำงานได้ดีในการอธิบายว่าทำไม
ฉันขอโทษที่บอกว่าคำถามนี้ผิดไป คุณจะไม่ใช้บิตในลักษณะนั้น บิตเป็นเลขฐานสอง คุณสามารถแปลงเลขทศนิยม 10 ให้เป็นไบนารี 1010 (8 + 2) ดังนั้นคุณต้องใช้ 4 บิตเพื่อแสดงค่าทศนิยม 10
คุณตกหลุมพรางเล็ก ๆ น้อย ๆ โดยใช้เลขฐานสอง (2), ฐานแปด (8) และเลขฐานสิบหก (16) เป็นตัวอย่างเพราะสิ่งเหล่านี้คือพลังทั้งหมดของ 2 และทำให้คุณคิดได้ในรูปของบิต ในขณะที่ 10 ไม่ใช่พลังของ 2 ดังนั้นมันจึงไม่ทำงานได้ดีเช่นนั้น
BCD - Binary Coded Decimal ใช้ 4 บิตต่อหลักเช่นเดียวกับเลขฐานสิบหก
การใช้บิตหมายถึงพลังของ 2 ดังนั้นอย่างที่คนอื่น ๆ บอกว่าคุณไม่สามารถ shohorn 10 บิตเป็นไบต์โดยไม่สูญเปล่า วิธีแก้ปัญหาทั่วไปคือการใช้ 4 บิตต่อเลขฐานสิบหกและสิ้นเปลืองสถานะ 6 สถานะที่แสดงเป็น AF สิ่งที่น่าสนใจคือการทำเลขทศนิยมด้วยวิธีนี้ - มันไม่เป็นระเบียบและเรียบง่าย
แนวคิดการสอนที่มีประโยชน์อาจเปรียบเทียบว่า Micky Mouse อาจพัฒนาระบบการนับได้อย่างไรเนื่องจากเขามีเพียง 4 นิ้วต่อมือซึ่งนำไปสู่ธรรมชาติด้วยระบบฐานแปด
นี่อาจเป็นการทำให้ใหญ่เกินไป แต่ก็ขึ้นอยู่กับคำถามที่คุณถาม
(และคำตอบนั้นเป็นฐานแปดหรือฐานสิบหก)
ฉันยังไม่พิจารณาเศษบิตเป็นบิตเพราะในบิตการใช้งานจริงไม่มีเศษส่วน
Q1: กี่บิตที่คุณสามารถเป็นตัวแทนในหลักทศนิยม ?
A1:คุณสามารถแสดงข้อมูล 3 บิตในหลักทศนิยมเดียว:
ชุดรูปแบบที่พบมากที่สุดจะเป็นเลขฐานสองตรงกับการตัดที่ 0 = 8 = 000 และ 1 = 9 = 001 แต่คุณสามารถใช้รูปแบบใด ๆ ที่ไม่มีสิ่งใดที่บอกว่านี่เป็นวิธีเดียวที่จะเข้ารหัสบิตเป็นตัวเลขทศนิยม
หรือ
Q2: ใช้เวลากี่บิตในการแทนทศนิยม
A2:คุณต้องมีอย่างน้อย 4 บิตเพื่อแสดงทศนิยมทั้งหมด กับขยะหรือห่อ
อีกรูปแบบที่พบมากที่สุดจะเป็นไบนารีตรงกับการห่อ แต่คุณสามารถใช้รูปแบบอื่น ๆ
ในฐาน 1024 แต่ละสัญลักษณ์คือ 10 บิต ทศนิยมสามหลักมีจำนวนข้อมูลเท่ากับหนึ่งหลักในฐาน 1000 ซึ่งน้อยกว่า 1024 เล็กน้อยดังนั้นตัวเลขทศนิยมมีน้อยกว่า 10/3 บิตเล็กน้อย การประมาณนี้ให้ 3.333333 ... ในขณะที่จำนวนที่แน่นอนคือ 3.321928 ...
ข้อจำกัดความรับผิดชอบ - ฉันไม่ใช่นักทฤษฎีข้อมูลเพียงรหัสลิงที่ทำงานเป็นหลักใน C และ C ++ (และด้วยประเภทความกว้างคงที่) และคำตอบของฉันจะมาจากมุมมองเฉพาะนั้น
มันต้องใช้เวลาโดยเฉลี่ย 3.2 บิตจะเป็นตัวแทนทศนิยมหลักเดียว - 0 ถึง 7 สามารถแสดงใน 3 บิตในขณะที่ 8 และ 9 ต้อง 4. 1(8*3 + 2*4)/10 == 3.2
มันมีประโยชน์น้อยกว่าที่มันฟัง สิ่งหนึ่งคุณเห็นได้ชัดว่าไม่มีเศษส่วน สำหรับอีกกรณีหนึ่งถ้าคุณใช้ชนิดจำนวนเต็มดั้งเดิม (เช่นไม่ใช่ BCD หรือ BigInt) คุณจะไม่ได้จัดเก็บค่าตามลำดับเลขทศนิยม (หรือเทียบเท่าแบบไบนารี) ประเภท 8 บิตสามารถเก็บค่าบางอย่างที่ใช้เวลาถึง 3 ตัวเลขทศนิยม แต่คุณไม่สามารถเป็นตัวแทนของทุกค่าทศนิยม 3 หลักใน 8 บิต - [0..255]
ช่วงคือ คุณไม่สามารถแทนค่า[256..999]
ใน 8 บิตเท่านั้น
เมื่อเราพูดถึงค่าเราจะใช้ทศนิยมหากแอปพลิเคชันคาดหวัง (เช่นแอปพลิเคชันธนาคารดิจิทัล) เมื่อเราพูดถึงบิตเรามักจะใช้เลขฐานสิบหกหรือเลขฐานสอง (ฉันแทบจะไม่เคยใช้เลขฐานแปดเพราะฉันทำงานกับระบบที่ใช้ไบต์ 8 บิตและ 32- บิตซึ่งไม่หารด้วย 3)
ค่าที่แสดงเป็นทศนิยมจะไม่จับคู่กับลำดับไบนารีอย่างหมดจด 255
ใช้ค่าทศนิยม เทียบเท่าไบนารีของแต่ละหลักจะเป็น010
, ,101
101
แต่ฐานเป็นตัวแทนของค่าที่เป็น255
11111111
ไม่มีการโต้ตอบกันระหว่างตัวเลขทศนิยมใด ๆในค่าตามลำดับเลขฐานสอง แต่มีการโต้ตอบโดยตรงกับตัวเลขฐานสิบหก - F == 1111
ดังนั้นค่าสามารถแสดงเป็นเลขFF
ฐานสิบหก
หากคุณอยู่ในระบบที่มี 9- บิตไบต์และ 36- บิตคำเป็นบรรทัดฐานแล้วฐานแปดทำให้รู้สึกมากขึ้นเนื่องจากบิตกลุ่มเป็นธรรมชาติสาม
1001001
ควรจะเป็น หรือ91
49
1001001
แมปไปที่73
( 64 + 8 + 1
) ฉันไม่ได้ตีความว่ามันเป็นลำดับของเลขฐานสิบที่เข้ารหัสด้วยเลขฐานสอง ถ้ามันควรจะเป็น BCD ซึ่งจะต้องใช้ 4 บิตต่อหลักแล้วเราต้องคิดชั้นนำบิตดังนั้นจึงต้อง0
49
3.2
log(10)/log(2)
ถ้าฉันสอนสิ่งนี้ฉันจะอธิบายก่อนว่าตัวเลขใด (แสดงเป็นชุดตัวเลขหมายถึง) กล่าวคือจากขวาไปซ้ายสมมติว่าฐาน n, a * n ^ 0 + b * n ^ 1 + c * n ^ 2 ... z * n ^ y
จากนั้นอธิบายว่า 10 ^ 3 มีค่าประมาณ 2 ^ 10 มันไม่ถูกต้องและเป็นเหตุผลในคอมพิวเตอร์เรามักไม่ทราบว่า 2k หมายถึงอะไรจริง ๆ (คือ 2,000 หรือ 2,048?) มันให้บริการค่อนข้างดีสำหรับการประมาณอย่างรวดเร็ว 2 ^ 16 ประมาณ 2 ^ (16 - 10) * 1,000 หรือ 2 ^ 6 (64) * 1,000 หรือ 64,000 ในความเป็นจริงมันคือ 65,536 แต่ถ้าคุณไม่รังเกียจที่จะออกไปประมาณร้อยละมันก็ใช้ได้ดีพอสมควรสำหรับการประมาณค่าแบบรวดเร็ว
d
บิตหมายถึงตัวเลขสามหลักทศนิยมและช่วยให้คุณเพื่อเป็นตัวแทนของจำนวนเต็มจากช่วง บิตสิบทั้งหมด (คิดว่าไบนารีตอนนี้) ให้ช่วงของ 999 อยู่ใกล้กับ 1,023 แต่น้อยกว่าเล็กน้อย ดังนั้นคุณอาจคาดหวังว่าควรน้อยกว่า 10/3 นิดหน่อย0..9
3*d
0..999
0..1023
d