1. การเข้ารหัสแปด

พูดถึงการเข้ารหัส... อย่างที่คุณทราบ ในชีวิตประจำวันเราใช้สัญลักษณ์ทศนิยม : ตัวเลขทั้งหมดของเราแสดงด้วยสัญลักษณ์ 10 ตัว: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 มี 10 ตัวเลขจึงเรียกว่าระบบทศนิยม

แต่โปรแกรมเมอร์เป็นนักประดิษฐ์ที่ยิ่งใหญ่ พวกเขาคิดการเข้ารหัสที่ใช้สัญลักษณ์ต่างๆ กันในทันที ตัวอย่างเช่น 16, 8 และ 2

การเข้ารหัสทางเลือกที่ใช้สัญลักษณ์ 8 นั้นง่ายที่สุด: เพียงแค่ทิ้ง 8 และ 9 และคุณจะได้รับการเข้ารหัสฐานแปด (ระบบเลขฐานแปด )

และใช่ คุณสามารถใช้ระบบเลขฐานแปดเพื่อระบุตัวอักษรที่เป็นตัวเลขได้ แน่นอนถ้าคุณต้องการจริงๆ มันง่ายกว่าที่คิด คุณต้องเขียนเลข 0 ก่อนตัวเลข

กล่าวอีกนัยหนึ่งJava ถือว่าจำนวนเต็มตามตัวอักษรใดๆ ที่ขึ้นต้นด้วย 0 เป็นค่าฐานแปด

ตัวอย่าง:

รหัส หมายเหตุ
int x = 015;
x คือ 13: 1*8+5
int x = 025;
x คือ 21: 2*8+5
int x = 0123;
x คือ 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
สิ่งนี้จะไม่คอมไพล์: 8 ไม่ใช่หนึ่งในสัญลักษณ์ที่ใช้ในการเข้ารหัสฐานแปด

คุณไม่จำเป็นต้องเขียนเลขฐานแปดในรหัสของคุณ แต่คุณควรรู้ว่ามันคืออะไร ท้ายที่สุด คุณจะต้องอ่านโค้ดที่เขียนโดยผู้อื่น และตามที่กล่าวไว้ข้างต้น โปรแกรมเมอร์เป็นนักประดิษฐ์ที่ยิ่งใหญ่

จำไว้ว่าคุณไม่สามารถเขียน 0 หน้าตัวเลขทุกตัวได้



2. การเข้ารหัสไบนารี

การเข้ารหัสแบบไบนารีนั้นน่าสนใจยิ่งขึ้น ถ้าเลขฐานแปดมีเฉพาะเลข 0-7 เลขฐานสองจะมีแค่ 0 และ 1 เหตุใดการเข้ารหัสนี้จึงจำเป็น

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

นี่จึงเป็นที่มาของความนิยมในระบบเลขฐานสอง

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

แต่ในช่วงหลายทศวรรษที่ผ่านมา โปรแกรมเมอร์ต่างชื่นชอบการเข้ารหัสไบนารี (และการเข้ารหัสอื่นๆ เป็นผลให้ Java มีตัวดำเนินการที่ใช้เลขฐานสองเป็นอินพุต และความแม่นยำของตัวเลขทศนิยมขึ้นอยู่กับการแทนเลขฐานสอง

โดยพื้นฐานแล้ว คุณควรรู้เกี่ยวกับการเข้ารหัสนี้ดีกว่าไม่รู้

เช่นเดียวกับในกรณีของการเข้ารหัสฐานแปด Java มีวิธีการเข้ารหัสตัวอักษรโดยใช้ระบบเลขฐานสอง นั่นคือตัวอักษรประกอบด้วย 0 และ 1 เท่านั้น เพื่อให้คอมไพเลอร์ Javaเข้าใจว่าโค้ดประกอบด้วยตัวอักษรที่เป็นตัวเลขซึ่งเข้ารหัสเป็นเลขฐานสอง แทนที่จะเป็นเพียงเลขฐานสิบที่ประกอบด้วยศูนย์และเลขหนึ่ง ตัวอักษรฐานสองทั้งหมดจะถูกระบุโดยใช้คำนำหน้า 0b ('b' มาจากคำว่าbinary ) .

ตัวอย่าง:

รหัส หมายเหตุ
int x = 0b100; 
x คือ 4: 1*4+0*2+0
int x = 0b1111;
х คือ 15: 1*8+1*4+1*2+1
int x = 0b1111000111; 
х คือ 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;
int x = 0b12000;
สิ่งนี้จะไม่คอมไพล์: 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

ทุกชุดของสี่บิตสอดคล้องกับอักขระเลขฐานสิบหกหนึ่งตัว สะดวกสุด ๆ โดยไม่มีการคูณหรือยกกำลังใดๆ"