การนับตามธรรมชาติเริ่มต้นที่ศูนย์
นี่คืออัลกอริทึมสำหรับการนับแอปเปิ้ลในตะกร้า:
count := 0
for each apple in basket
count := count + 1
หลังจากดำเนินการตามข้างต้นให้count
นับจำนวนแอปเปิ้ล มันอาจจะเป็นศูนย์เพราะตะกร้าสามารถว่างเปล่า
หากคุณไม่ได้ใช้บัตรเครดิตตลอดทั้งเดือนคุณจะได้รับใบเรียกเก็บเงิน 1 ดอลลาร์หรือไม่? หรือร้อยละ 1
เมื่อคุณรีเซ็ตมาตรวัดระยะทางด้วยเครื่องวัดระยะทางในรถยนต์ของคุณจะเป็น 0001 หรือ 0000 หรือไม่
อาร์เรย์สามารถให้มุมมองที่หลากหลายของข้อมูลเดียวกัน
พิจารณาอาร์เรย์ของโครงสร้าง 32 บิตd
ซึ่งจะทำ 16 w
คำบิตแต่ละ แต่ละคำที่ถูกสร้างขึ้นจากสอง 8 b
บิตไบต์ ภายใต้การจัดทำดัชนีเป็นศูนย์การซ้อนทับดูสะดวกมาก:
d: | 0 | 1 |
w: | 0 | 1 | 2 | 3 |
b: |0|1|2|3|4|5|6|7|
วัตถุ 32 บิตd[1]
เป็นที่อยู่ของคำw[2]
ซึ่งคำนวณได้ง่ายโดยการคูณดัชนีด้วย 2 ซึ่งเป็นอัตราส่วนของขนาดของวัตถุ 32 และ 16 บิต b[4]
นอกจากนี้ในไบต์อยู่ก็คือ
สิ่งนี้ใช้ได้เพราะศูนย์เป็นศูนย์ในทุกหน่วยของการวัด: ไบต์, คำ, คำสองคำและอื่น ๆ
ดูแผนภาพด้านบน: ดูเหมือนไม้บรรทัดที่การแปลงหน่วยใช้งานง่าย
ด้วยการจัดทำดัชนีตามเดียวมันแบ่ง:
d: | 1 | 2 |
w: | 1 | 2 | 3 | 4 |
b: |1|2|3|4|5|6|7|8|
ตอนนี้เราไม่สามารถคูณd
ดัชนีด้วย 2 เพื่อรับw
ดัชนีหรือ 4 เพื่อให้ได้b
ดัชนี การแปลงระหว่างหน่วยกลายเป็นเงอะงะ ยกตัวอย่างเช่นที่จะไปจากd[2]
การที่เรามีการคำนวณb[4]
((2 - 1) * 4) + 1 = 5
เราต้องลบอคติที่น่ารำคาญ 1 ครั้งในd
หน่วยจากนั้นทำการปรับขนาดในระบบพิกัดที่เป็นศูนย์ตามธรรมชาติแล้วเพิ่มกลับไปที่น่ารำคาญ 1 ในb
หน่วย โปรดทราบว่ามันไม่เหมือนกัน 1! เราลบความกว้างคำหนึ่งคู่ แต่แล้วเพิ่มความกว้างไบต์หนึ่ง
การแปลงระหว่างมุมมองที่แตกต่างกันของข้อมูลกลายเป็นการแปลงที่เป็นองศาเซลเซียส - ฟาเรนไฮต์
ผู้ที่กล่าวว่าอาเรย์แบบอิงฐานนั้นจัดการได้ง่ายในระดับการใช้งานเพราะมีเพียงการลบอย่างง่ายเพียง 1 เดียวเท่านั้นที่หลอกตัวเองและคุณ สิ่งนี้เป็นจริงเฉพาะในกรณีที่เราไม่ทำการคำนวณสเกลในประเภทข้อมูลที่แตกต่างกัน การคำนวณดังกล่าวเกิดขึ้นในโปรแกรมใด ๆ ที่มีมุมมองที่ยืดหยุ่นกับข้อมูล (เช่นอาร์เรย์หลายมิติเข้าถึงได้ในรูปแบบหนึ่งมิติ) หรือที่จัดการกับหน่วยเก็บ: ตัวอย่างเช่นตัวจัดสรรหน่วยความจำระบบไฟล์หรือไลบรารีบัฟเฟอร์เฟรมวิดีโอ
การย่อขนาดตัวเลขให้เล็กสุด
ในฐานใด ๆ ถ้าเราต้องการใช้ตัวเลขที่น้อยที่สุดเพื่อใช้ช่วงของค่าที่เป็นกำลังของฐานเราจะต้องเริ่มจากศูนย์ ตัวอย่างเช่นในฐานสิบสามหลักก็เพียงพอที่จะให้ค่าที่แตกต่างกันพันค่าจาก 0 ถึง 999 หากเราเริ่มจาก 1 เราจะล้นด้วยค่าเพียงค่าเดียวและเราต้องการตัวเลขสี่หลัก
สิ่งนี้มีความสำคัญในคอมพิวเตอร์เนื่องจากจำนวนหลักในไบนารี่แปลเป็นบรรทัดที่อยู่ของฮาร์ดแวร์ ตัวอย่างเช่นชิป ROM ที่มี 256 คำอยู่ในนั้นสามารถแก้ไขจาก 0 ถึง 255 ซึ่งต้องใช้ 8 บิต: 00000000 ถึง 11111111 หากได้รับการจัดการตั้งแต่ 1 ถึง 256 ต้องใช้เก้าบิต เราต้องเพิ่มการติดตามที่อยู่อีกครั้งอย่างสิ้นเปลืองไปยังแผงวงจรหรือวงจรรวม ดังนั้นสิ่งที่อาจเกิดขึ้นในทางปฏิบัติก็คือ 0 จะถูกเรียก1 ที่ระดับซอฟต์แวร์ API สำหรับการเข้าถึงชิปนั้น คำขอสำหรับคำที่ 1 จะนำ 00000000 ไปใช้จริงบนบัส 8 บิต หรืออื่น ๆ ขอ 1 จะแปลไปยังที่อยู่ 00000001 เป็นไปตามคาด แต่ขอ 256 จะแผนที่ไปยังที่อยู่ 8 บิตที่ไม่ได้ใช้อย่างอื่นมากกว่า 00000000 ที่อยู่ 9 บิต 100000000 ทั้งสองคนนี้ kludges ถุงกัดเป็นจริงการแก้ปัญหาใน ค้นหาปัญหาและหลีกเลี่ยงทั้งหมดโดยใช้ 0 ถึง 255 ที่ฮาร์ดแวร์ในซอฟต์แวร์และในส่วนต่อประสานผู้ใช้และเอกสารทั้งหมด
การกระจัดแบบหนึ่งที่พื้นฐานคือความโง่
พิจารณาทฤษฎีดนตรีตะวันตกเช่น เรามีสเกลคู่กับเจ็ดโน้ต แต่เราเรียกพื้นที่ที่มันครอบคลุมอ็อกเทฟ ! การผกผันของช่วงเวลานั้นเป็นไปตามกฎของเก้า : ตัวอย่างเช่นการกลับกันของหนึ่งในสามคือหก (ลบสามจากเก้า) ดังนั้นสามตัวเลขที่แตกต่างกันก็เล่นเพื่ออะไรที่ง่ายมาก: เจ็ด (โน้ตในสเกล), แปด (แปดเสียง) และเก้า (ลบจากถึงกลับหัว)
หากโน้ตเจ็ดใบทำผนังหรือ heptave และช่วงเวลาเป็นศูนย์โดยพื้นฐานแล้วเราจะลบจากเจ็ดถึงกลับด้าน ทุกอย่างขึ้นอยู่กับเจ็ด
นอกจากนี้ช่วงเวลาสามารถซ้อนได้ง่าย ในระบบปัจจุบันถ้าเรากระโดดหนึ่งในห้าแล้วก็เป็นหนึ่งในสี่อีกครั้งแล้วก็เป็นหนึ่งในสามเราไม่สามารถเพิ่มมันได้ ช่วงเวลาที่เป็นผลลัพธ์จะน้อยกว่าสองครั้ง มันไม่ได้เป็นที่สอง แต่จริงๆแล้วเป็นสิบ! ในแต่ละขั้นตอนเราต้องลบหนึ่งขั้น เพิ่มขึ้นหนึ่งในห้าจากนั้นหนึ่งในสี่ไม่ใช่เก้า แต่มีเพียงระดับแปดเสียง
ในระบบเพลงที่ออกแบบมาอย่างดีเราเพียงแค่เพิ่มช่วงเวลาเพื่อพิจารณาการก้าวกระโดดที่เกิดขึ้น ลำดับของบันทึกย่อที่เริ่มต้นและสิ้นสุดในบันทึกเดียวกันนั้นจะมีคุณสมบัติคล้ายกับกฎแรงดันไฟฟ้ารอบวงจร: ช่วงเวลาทั้งหมดจะเพิ่มเป็นศูนย์
ทฤษฎีดนตรีและการเขียนล้าสมัยไปมาก ส่วนใหญ่ไม่ได้เปลี่ยนไปนับตั้งแต่วันที่แต่งด้วยปากกาขนนกด้วยแสงเทียน
ระบบที่ใช้ระบบเดียวสร้างความสับสนให้กับคนคนเดียวกันที่ไม่สามารถจัดการกับอาร์เรย์ที่ไม่มีศูนย์
เมื่อปี 2000 กลิ้งไปรอบ ๆ หลายคนสับสนว่าทำไมสหัสวรรษใหม่ยังไม่เริ่ม ผู้ที่ชี้ให้เห็นว่ามันจะไม่เริ่มจนกว่าปี 2001 จะถูกมองว่าเป็นคนเซ่อปาร์ตี้และคนโง่ ท้ายที่สุดคุณอยู่ในวัย 20 ปีเมื่อคุณอายุ 20 ใช่ไหม? ไม่ใช่เมื่อคุณอายุ 21 ปีหากคุณคิดว่าสหัสวรรษเริ่มต้นในวันที่ 1 มกราคม 2000 คุณไม่มีสิทธิ์บ่นเกี่ยวกับอาร์เรย์ที่ใช้ศูนย์ในภาษาการเขียนโปรแกรมใด ๆ พวกมันทำงานอย่างที่คุณชอบ (แต่ใช่ผู้สนับสนุนของการกระจัดและอาร์เรย์ที่ใช้หนึ่งฐานคือ dweebs และพรรค poopers ศตวรรษควรเริ่มต้นใน XX00 ปีและพันปีใน X000 ปี)
ปฏิทินเป็นใบ้ แต่อย่างน้อยเวลาของวันจะเป็นศูนย์
แต่ละนาทีใหม่ในนาฬิกาของคุณเริ่มต้นด้วย: 00 วินาที แต่ละชั่วโมงใหม่เริ่มต้นด้วย 00:00 นาทีและวินาที และอย่างน้อยในนาฬิกา 24 ชั่วโมงวันที่หมุนไปรอบ ๆ เมื่อเที่ยงคืนและเพิ่ม 11:59:59 เป็น 00:00:00
ดังนั้นหากคุณต้องการที่จะคำนวณวินาทีตั้งแต่เที่ยงคืนเวลา 13:53:04 13 * 3600 + 53 * 60 + 4
เหมือนคุณก็มีการประเมิน ไม่มีการ1
เพิ่มหรือการลบเบาจืด
ปิดพูดจาโผงผางเกี่ยวกับ MIDI
โอเคมันคืออะไรกับนักดนตรีแม้จะเป็นนักวิชาการด้านเทคนิค?
MIDI! มันใช้การกำหนดหมายเลขตามศูนย์สำหรับโปรแกรมและช่องในการแสดงข้อความลวดจริง แต่เฟืองแสดงเป็น 1 ตาม! สำหรับโปรแกรมอินสแตนซ์ 0 ถึง 127 จะเรียกว่า 1 ถึง 128 บนอุปกรณ์ส่วนใหญ่ แต่บางโปรแกรมเรียกว่า 0 ถึง 127 หรือแม้แต่ให้ผู้ใช้เลือกได้
โปรแกรม 71 ถึง 80 ถือเป็น "ธนาคาร" ของสิบ มันบอกว่าถูกต้องบนแป้นเหยียบ MIDI ของฉัน footswitch นั้นมีป้ายกำกับตั้งแต่ 1 ถึง 10 และถ้าฉันอยู่ในธนาคารที่เจ็ดพวกเขาเลือกโปรแกรม 71 ถึง 80 อย่างไรก็ตามอุปกรณ์หรือซอฟต์แวร์คอมพิวเตอร์บางโปรแกรมแสดงหมายเลขโปรแกรม 1-128 เป็น 0 ถึง 127 หรือแม้กระทั่งให้ผู้ใช้ ทางเลือก! อะไรคือสิ่งที่แย่กว่านั้นคือระบบที่ใช้ระบบเดียวหรือความโกลาหลที่สร้างขึ้นโดยใช้ทั้งระบบหนึ่งและศูนย์ในเวลาเดียวกัน
หมายเลขสถานี MIDI เรียกว่า 1 ถึง 16 แต่แสดงด้วยเลขฐาน 0 ถึง 15 ราวกับว่าทั้งๆที่มีการนำเสนอแบบอิงอยู่แล้วเกียร์บางตัวใช้ dispswitch สำหรับการกำหนดค่าหมายเลขช่องสัญญาณและบ่อยครั้งที่สวิตช์เหล่านี้ใช้รหัสไบนารี่พื้นฐานที่เป็นศูนย์ ดังนั้นหากคุณต้องการแชนเนล 3 คุณต้องสลับเป็น 0010 (ไบนารี 2)