1. การเข้ารหัสแปด
พูดถึงการเข้ารหัส... อย่างที่คุณทราบ ในชีวิตประจำวันเราใช้สัญลักษณ์ทศนิยม : ตัวเลขทั้งหมดของเราแสดงด้วยสัญลักษณ์ 10 ตัว: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 มี 10 ตัวเลขจึงเรียกว่าระบบทศนิยม
แต่โปรแกรมเมอร์เป็นนักประดิษฐ์ที่ยิ่งใหญ่ พวกเขาคิดการเข้ารหัสที่ใช้สัญลักษณ์ต่างๆ กันในทันที ตัวอย่างเช่น 16, 8 และ 2
การเข้ารหัสทางเลือกที่ใช้สัญลักษณ์ 8 นั้นง่ายที่สุด: เพียงแค่ทิ้ง 8 และ 9 และคุณจะได้รับการเข้ารหัสฐานแปด (ระบบเลขฐานแปด )
และใช่ คุณสามารถใช้ระบบเลขฐานแปดเพื่อระบุตัวอักษรที่เป็นตัวเลขได้ แน่นอนถ้าคุณต้องการจริงๆ มันง่ายกว่าที่คิด คุณต้องเขียนเลข 0 ก่อนตัวเลข
กล่าวอีกนัยหนึ่งJava ถือว่าจำนวนเต็มตามตัวอักษรใดๆ ที่ขึ้นต้นด้วย 0 เป็นค่าฐานแปด
ตัวอย่าง:
รหัส | หมายเหตุ |
---|---|
|
x คือ 13: 1*8+5 |
|
x คือ 21: 2*8+5 |
|
x คือ 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0 |
|
สิ่งนี้จะไม่คอมไพล์: 8 ไม่ใช่หนึ่งในสัญลักษณ์ที่ใช้ในการเข้ารหัสฐานแปด |
คุณไม่จำเป็นต้องเขียนเลขฐานแปดในรหัสของคุณ แต่คุณควรรู้ว่ามันคืออะไร ท้ายที่สุด คุณจะต้องอ่านโค้ดที่เขียนโดยผู้อื่น และตามที่กล่าวไว้ข้างต้น โปรแกรมเมอร์เป็นนักประดิษฐ์ที่ยิ่งใหญ่
จำไว้ว่าคุณไม่สามารถเขียน 0 หน้าตัวเลขทุกตัวได้
2. การเข้ารหัสไบนารี
การเข้ารหัสแบบไบนารีนั้นน่าสนใจยิ่งขึ้น ถ้าเลขฐานแปดมีเฉพาะเลข 0-7 เลขฐานสองจะมีแค่ 0 และ 1 เหตุใดการเข้ารหัสนี้จึงจำเป็น
สิ่งนี้เกี่ยวข้องกับโครงสร้างภายในของคอมพิวเตอร์ ทุกอย่างในคอมพิวเตอร์ทำงานด้วยไฟฟ้า และเมื่อมันเกิดขึ้น วิธีที่มีประสิทธิภาพที่สุดในการจัดเก็บและส่งข้อมูลบางอย่างโดยใช้ไฟฟ้าคือการใช้สองสถานะ: ไม่มีไฟฟ้าในสาย (ศูนย์) และมีไฟฟ้า (หนึ่ง)
นี่จึงเป็นที่มาของความนิยมในระบบเลขฐานสอง
ตามหลักการแล้ว Java ไม่ได้ใช้บ่อยนัก: Java ถือเป็นภาษาระดับสูงซึ่งแยกออกจากฮาร์ดแวร์ที่ทำงานอย่างสมบูรณ์ คุณสนใจจริง ๆ ไหมว่ารูปแบบใดที่ใช้ในการจัดเก็บและประมวลผลข้อมูลภายในคอมพิวเตอร์
แต่ในช่วงหลายทศวรรษที่ผ่านมา โปรแกรมเมอร์ต่างชื่นชอบการเข้ารหัสไบนารี (และการเข้ารหัสอื่นๆ เป็นผลให้ Java มีตัวดำเนินการที่ใช้เลขฐานสองเป็นอินพุต และความแม่นยำของตัวเลขทศนิยมขึ้นอยู่กับการแทนเลขฐานสอง
โดยพื้นฐานแล้ว คุณควรรู้เกี่ยวกับการเข้ารหัสนี้ดีกว่าไม่รู้
เช่นเดียวกับในกรณีของการเข้ารหัสฐานแปด Java มีวิธีการเข้ารหัสตัวอักษรโดยใช้ระบบเลขฐานสอง นั่นคือตัวอักษรประกอบด้วย 0 และ 1 เท่านั้น เพื่อให้คอมไพเลอร์ Javaเข้าใจว่าโค้ดประกอบด้วยตัวอักษรที่เป็นตัวเลขซึ่งเข้ารหัสเป็นเลขฐานสอง แทนที่จะเป็นเพียงเลขฐานสิบที่ประกอบด้วยศูนย์และเลขหนึ่ง ตัวอักษรฐานสองทั้งหมดจะถูกระบุโดยใช้คำนำหน้า 0b ('b' มาจากคำว่าbinary ) .
ตัวอย่าง:
รหัส | หมายเหตุ |
---|---|
|
x คือ 4: 1*4+0*2+0 |
|
х คือ 15: 1*8+1*4+1*2+1 |
|
х คือ 967: 1*2 9 +1*2 8 +1*2 7 +1*2 6 +0*2 5 +0*2 4 +0*2 3 + 1*2 2 + 1*2+1; |
|
สิ่งนี้จะไม่คอมไพล์: 2 ไม่ใช่หนึ่งในสัญลักษณ์ที่ใช้ในการเข้ารหัสไบนารี |
3. การเข้ารหัสเลขฐานสิบหก
นอกจากการเข้ารหัสเลขฐานแปดและเลขฐานสองแล้ว ตัวอักษรยังสามารถเขียนเป็นเลขฐานสิบหกได้อีกด้วย นี่คือการเข้ารหัสที่ได้รับความนิยมมาก
นั่นเป็นเพราะแม้ว่าสัญลักษณ์เลขฐานสองจะใกล้เคียงกับวิธีจัดเก็บตัวเลขจริงๆ มากที่สุดเท่าที่จะเป็นไปได้ แต่ก็ยากเกินไปสำหรับมนุษย์ที่จะทำงานกับตัวเลขดังกล่าวอย่างมีประสิทธิภาพ ในระบบเลขฐานสอง ตัวเลขหนึ่งล้านประกอบด้วย 20 หลัก ไม่ใช่ 7
นั่นเป็นเหตุผลที่โปรแกรมเมอร์คิดระบบเลขฐานสิบหกขึ้นมา ท้ายที่สุด 16 คือ 2 ยก กำลัง 4ดังนั้น 4 บิตตรงกับเลขฐานสิบหกหนึ่งหลัก กล่าวอย่างคร่าว ๆ ตอนนี้ทุก ๆ 4 บิตสามารถเขียนเป็นเลขฐานสิบหกหลักเดียวได้
การเข้ารหัสเลขฐานสิบหกยังมีคำนำหน้าเฉพาะของตัวเอง: 0x ตัวอย่าง:
เลขฐานสิบ | สัญกรณ์ไบนารี | สัญกรณ์เลขฐานสิบหก |
---|---|---|
17 | 0b 0001 0001 | 0x 1 1 |
4 1 | 0b 0010 1 00 1 | 0x 2 9 |
85 | 0b 0101 0101 | 0x 5 5 |
256 | 0b 1 0000 0000 | 0x 1 0 0 |
โอเค คุณว่า ชัดเจนเพียงพอแล้วว่าเราได้ระบบเลขฐานแปดมาได้อย่างไร เราเพิ่งโยนเลข 8 และ 9 ออกไป แต่เราจะเอาสัญลักษณ์พิเศษ 6 ตัวสำหรับระบบเลขฐานสิบหกมาจากไหน ฉันอยากเห็นพวกเขา!
มันตรงไปตรงมาทั้งหมด ตัวอักษรภาษาอังกฤษ 6 ตัวแรกถูกนำมาเป็นสัญลักษณ์ที่ขาดหายไป 6 ตัว: A (10), B (11), C (12), D (13), E (14), F (15)
ตัวอย่าง:
สัญกรณ์เลขฐานสิบหก | สัญกรณ์ไบนารี | เลขฐานสิบ |
---|---|---|
0x1 _ | 0b 0000 0001 | 1 |
0x9 _ | 0b 0000 1001 | 9 |
0x เอ | 0b 0000 1010 | 10 |
0x บี | 0b 0000 1011 | 11 |
0x ซี | 0b 0000 1100 | 12 |
0x ง | 0b 0000 1101 | 13 |
0x อี | 0b 0000 1110 | 14 |
0x เอฟ | 0b 0000 1111 | 15 |
0x 1 ฟ | 0b 0001 1111 | 31 |
0x เอเอฟ | 0b 1010 1111 | 175 |
0x เอฟเอฟ | 0b 1111 1111 | 255 |
0x ก กก กก | 0b 1111 1111 1111 | 4095 |
4. วิธีแปลงตัวเลขจากเลขฐานสิบหก
การแปลงตัวเลขจากเลขฐานสิบหกเป็นทศนิยมนั้นง่ายมาก สมมติว่าคุณมีเลข0 x A F C F เป็นทศนิยมเท่าไหร่?
อันดับแรก เรามีระบบหมายเลขประจำตำแหน่ง ซึ่งหมายถึงส่วนร่วมของแต่ละหลักในจำนวนทั้งหมดจะเพิ่มขึ้น 16 เท่าเมื่อเราเลื่อนจากขวาไปซ้าย:
ก * 16 3 + ฉ * 16 2 + ค * 16 1 + ฉ
สัญลักษณ์ A แทนเลข 10 ตัวอักษร C แทนเลข 12 และอักษร F แทนสิบห้า เราได้รับ:
10 * 16 3 + 15 * 16 2 + 12 * 16 1 + 15
การยก 16 ให้เป็นพลังต่าง ๆ ที่สอดคล้องกับตัวเลข เราได้รับ:
10 * 4096 + 15 * 256 + 12 * 16 + 15
เราสรุปทุกอย่างและรับ:
45007
คุณรู้ว่าหมายเลขนี้ถูกเก็บไว้ในหน่วยความจำอย่างไร:
0x เอเอฟซีเอฟ
แต่ตอนนี้ลองแปลงเป็นเลขฐานสอง ในเลขฐานสองมันจะเป็น:
0b 1010 1111 1100 1111
ทุกชุดของสี่บิตสอดคล้องกับอักขระเลขฐานสิบหกหนึ่งตัว สะดวกสุด ๆ โดยไม่มีการคูณหรือยกกำลังใดๆ"
GO TO FULL VERSION