ตัวเลขที่ใช้สัญกรณ์ 0x หมายถึงอะไร?


107

อะไร0xคำนำหน้าบนตัวเลขหมายความว่าอย่างไร

const int shared_segment_size = 0x6400;

มันมาจากโปรแกรม C ฉันจำไม่ได้ว่ามันมีค่าเท่าไหร่และโดยเฉพาะความxหมายของตัวอักษร


2
Search for "hexadecimal notation"
asawyer

2
@asawyer ขอบคุณ ก่อนที่ฉันจะหยิบ "0x" เป็นเลขฐานสิบหกฉันไม่รู้ว่าจะค้นหาจากที่ไหน
Terry Li

3
กำลังค้นหา0x prefix C++นำคุณมาที่นี่ตอนนี้ :)
Carl Smith

คำตอบ:


112

ตัวอักษรที่ขึ้นต้นด้วย0xจำนวนเต็มฐานสิบหก (ฐาน 16)

ตัวเลข0x6400คือ25600.

6 * 16^3 + 4 * 16^2 = 25600

ตัวอย่างเช่นตัวอักษร (ใช้ในสัญกรณ์ฐานสิบหกโดยที่ A = 10, B = 11 ... F = 15)

ตัวเลข0x6BF0คือ27632.

6 * 16^3 + 11 * 16^2 + 15 * 16^1 = 27632
24576    + 2816      + 240       = 27632

2
สิ่งที่ฉันสงสัยเกี่ยวกับตัวเลขเชิงลบควรแสดงเป็นเลขฐานสิบหกอย่างไร? ชอบ -0xff หรือ 0x-ff? ฉันเดาคนแรก แต่ฉันไม่รู้
Luc

7
@luc คนแรกถูกต้อง แม้ว่าบ่อยขึ้นผมเห็นเพียง0xffffffffและเช่น ( 0xffffffff = -1สำหรับ int 32 บิตสมมติว่าส่วนเติมเต็ม 2)
Mysticial

ตัวเลขเชิงลบ @Luc จะแสดงในรูปแบบไบนารีโดยใช้ส่วนเติมเต็มของ 2 ซึ่งเป็นวิธีที่ชาญฉลาดที่ไม่ต้องใช้เครื่องหมาย '-' ดังนั้นโดยพื้นฐานแล้วมันจะแปลงจากไบนารีเป็นฐานสิบหกลบหรือบวก
Shuvo Sarker

@ShuvoSarker ขอบคุณสำหรับการเพิ่ม! นั่นเป็นเพียงการแสดงความจำ แต่ฉันเดาว่าคล้ายกับว่าเราจะตกลงว่าเรามีชุดตัวเลขตั้งแต่ 0–999 และ 1,000-1999 จะแทนจำนวนลบ คำถามของฉันเกี่ยวกับสัญกรณ์ที่มนุษย์อ่านได้แม้ว่าการรู้ว่าคอมพิวเตอร์ทำอย่างไรอาจช่วยคนอื่นได้ขอบคุณ :)
ลัค

16

ในภาษา C และภาษาตามไวยากรณ์ C คำนำหน้า0xหมายถึงเลขฐานสิบหก (ฐาน 16)

ดังนั้น 0x400 = 4 × (16 2 ) + 0 × (16 1 ) + 0 × (16 0 ) = 4 × ((2 4 ) 2 ) = 2 2 × 2 8 = 2 10 = 1024 หรือหนึ่งไบนารี K .

ดังนั้น 0x6400 = 0x4000 + 0x2400 = 0x19 × 0x400 = 25K



8

ตัวเลขที่ขึ้นต้นด้วย0xเลขฐานสิบหก (ฐาน 16) หมายถึง0x640025600

ในการแปลง

  • คูณตัวเลขสุดท้ายด้วย 1
  • เพิ่มหลักที่สอง - สุดท้ายคูณ 16 (16 ^ 1)
  • เพิ่มตัวเลขตัวที่สามคูณ 256 (16 ^ 2)
  • เพิ่มตัวเลขตัวที่สี่คูณ 4096 (16 ^ 3)
  • ... และอื่น ๆ

ปัจจัย 1, 16, 256 และอื่น ๆ คือพลังที่เพิ่มขึ้นของ 16

0x6400 = (0*1) + (0*16^1) + (4*16^2) + (6*16^3) = 25600 

หรือ

0x6400 = (0*1) + (0*16) + (4*256) + (6*4096) = 25600 

8

ง่าย

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

ตัวอย่าง:

0x6400แปลเป็น6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.เมื่อคอมไพเลอร์อ่าน0x6400เข้าใจว่าตัวเลขเป็นเลขฐานสิบหกโดยใช้คำศัพท์ 0x โดยปกติเราสามารถเข้าใจโดย(6400)16 or (6400)8หรือฐานใด ๆ ..

หวังว่าจะช่วยไม่ทางใดก็ทางหนึ่ง

ขอให้เป็นวันที่ดี,

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