UTILS.
ทำงานในเบราว์เซอร์ 100%
🔢

ตัวแปลง Two's Complement

แปลงจำนวนเต็มมีเครื่องหมายไป/มาจาก two's-complement แบบ binary และ hex ที่ความกว้าง 4, 8, 16, 32 หรือ 64 บิต พร้อม one's complement และการตีความแบบไม่มีเครื่องหมาย

ป้อนตัวเลขหรือรูปแบบบิตด้านบน

เกี่ยวกับเครื่องมือนี้

ตัวแปลง Two's Complement จะเข้ารหัสจำนวนเต็มมีเครื่องหมายเป็นการนำเสนอ two's-complement แบบเลขฐานสองและฐานสิบหกที่ความกว้างบิตที่คุณเลือก (4, 8, 16, 32 หรือ 64 บิต) และถอดรหัสรูปแบบเลขฐานสองหรือฐานสิบหกกลับเป็นค่ามีเครื่องหมายที่มันแทน มันใช้ BigInt ตลอด ดังนั้นค่า 64 บิตจึงจัดการได้อย่างแม่นยำโดยไม่สูญเสียความละเอียด

สำหรับความกว้าง N บิต ช่วงมีเครื่องหมายคือ −2^(N−1) ถึง 2^(N−1)−1 ในการเข้ารหัสเลขทศนิยม d: ถ้า d ไม่เป็นลบ รูปแบบคือ d เฉย ๆ; ถ้า d เป็นลบ รูปแบบคือ 2^N + d (เทียบเท่ากับการกลับทุกบิตของ |d| แล้วบวก 1) เครื่องมือส่งออกเลขฐานสอง N บิตที่เติมศูนย์ เลขฐานสิบหก N/4 หลัก one's complement (bitwise NOT) และการตีความแบบไม่มีเครื่องหมายของบิตเดียวกัน และทำเครื่องหมายข้อผิดพลาด overflow เมื่อค่าไม่พอดีกับความกว้างที่เลือก

ในการถอดรหัส วางรูปแบบเลขฐานสองหรือฐานสิบหก แล้วเครื่องมือจะอ่านบิตบนสุด: ถ้าบิตนัยสำคัญสูงสุดถูกตั้งค่า ค่าคือ pattern − 2^N (ลบ) มิฉะนั้นคือรูปแบบเอง มันแสดงการอ่านทั้งแบบมีเครื่องหมายและไม่มีเครื่องหมายเคียงข้างกันเสมอ ซึ่งเป็นความกำกวมที่ two's complement แก้ไขในระดับฮาร์ดแวร์ การคำนวณทั้งหมดเป็นแบบภายในเบราว์เซอร์ของคุณ

คำถามที่พบบ่อย

ช่วงสำหรับความกว้างบิตแต่ละแบบคือเท่าใด?
ความกว้าง N บิตแทนค่ามีเครื่องหมายจาก −2^(N−1) ถึง 2^(N−1)−1 ดังนั้น 8 บิตครอบคลุม −128 ถึง 127, 16 บิต −32768 ถึง 32767 และ 32 บิตประมาณ ±2.1 พันล้าน ค่านอกช่วงจะกระตุ้นคำเตือน overflow
จำนวนลบเข้ารหัสอย่างไร?
นำขนาดมา กลับทุกบิต (one's complement) แล้วบวก 1 เทียบเท่ากับรูปแบบเท่ากับ 2^N บวกจำนวนลบ เช่น −1 ใน 8 บิตคือ 11111111 และ −42 คือ 11010110
ทำไมจึงแสดงค่าแบบไม่มีเครื่องหมายด้วย?
รูปแบบบิตเดียวกันมีการอ่านสองแบบ: แบบมีเครื่องหมาย (two's complement) และไม่มีเครื่องหมาย การแสดงทั้งสองทำให้ชัดเจนว่า เช่น รูปแบบ 8 บิต 11111111 คือ −1 แบบมีเครื่องหมายแต่ 255 แบบไม่มีเครื่องหมาย การตีความขึ้นอยู่กับว่าฮาร์ดแวร์จัดการอย่างไร
มันจัดการค่า 64 บิตอย่างแม่นยำได้ไหม?
ได้ ตัวแปลงใช้เลขคณิต BigInt ความละเอียดตามอำเภอใจ ดังนั้นรูปแบบ 64 บิตและค่ามีเครื่องหมายของมันจึงคำนวณได้อย่างแม่นยำโดยไม่มีการปัดที่ตัวเลข JavaScript ธรรมดาจะนำมาเกิน 2^53

เครื่องมือเพิ่มเติม