แปลงเลขฐาน

พิมพ์ตัวเลขแล้วเห็นผลเป็นฐานสอง ฐานแปด ฐานสิบ และฐานสิบหกพร้อมกัน รวมถึงฐานอื่นตั้งแต่ 2 ถึง 36 ทุกอย่างคำนวณด้วยเลขจำนวนเต็มแบบแม่นยำ ค่าขนาด 64 บิตจึงเก็บครบทุกหลัก ลองเอา FFFFFFFFFFFFFFFF ไปวางในเว็บแปลงส่วนใหญ่จะได้ 18446744073709552000 ซึ่งไม่ใช่ตัวเลขนั้นและไม่มีอะไรเตือน ส่วนทศนิยมแปลงทีละหลักแทนการใช้เลขทศนิยมของเครื่อง 0.1 ฐานสิบจึงไปถึงฐานสามได้ครบ และถ้าเศษส่วนวนซ้ำไม่รู้จบ ระบบจะบอก ไม่ใช่ปัดทิ้งเงียบ ๆ

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

ตัวเลขของฉันถูกส่งไปไหนไหม

ไม่ การแปลงเกิดขึ้นในแท็บนี้ขณะที่คุณพิมพ์ นโยบายความปลอดภัยของเว็บกำหนด connect-src ‘none’ เบราว์เซอร์จึงบล็อกการเรียกเครือข่ายจากหน้านี้ ต่อให้โค้ดอยากส่งออกไปก็ส่งไม่ได้

มี parseInt อยู่แล้ว ทำไมต้องมีหน้านี้

เพราะ parseInt เลิกให้คำตอบที่ถูกตั้งแต่ประมาณเก้าพันล้านล้าน และไม่บอกด้วย ลองสั่งให้แปลง FFFFFFFFFFFFFFFF มันจะคืน 18446744073709552000 ทั้งที่คำตอบคือ 18446744073709551615 ต่างกัน 385 มาแบบเงียบ ๆ ในกรณีที่คนแปลงเลขฐานสิบหกเจอบ่อยที่สุด ทุกอย่างในหน้านี้ใช้จำนวนเต็มความละเอียดไม่จำกัด จึงไม่มีขนาดไหนที่มันเริ่มเดา

ทำไม 0.1 ในฐานสองถึงไม่ลงตัว

ด้วยเหตุผลเดียวกับที่หนึ่งส่วนสามไม่ลงตัวในฐานสิบ คือฐานนั้นไม่มีวิธีเขียนมันได้พอดี หนึ่งส่วนสิบในฐานสองคือ 0.0001100110011 วนไปเรื่อย ๆ ซึ่งก็เป็นเหตุผลที่ 0.1 บวก 0.2 ในภาษาโปรแกรมส่วนใหญ่ได้ 0.30000000000000004 หน้านี้จะบอกคุณเมื่อเศษส่วนวนซ้ำ แทนที่จะปัดทิ้งแล้วปล่อยให้เข้าใจว่ามันลงตัว

บรรทัดที่บอกค่าแบบมีเครื่องหมายคืออะไร

บิตชุดเดียวกันมีความหมายได้สองแบบ ขึ้นกับว่าโปรแกรมที่สร้างมันถือว่าบิตบนสุดเป็นเครื่องหมายหรือไม่ 0xFFFFFFFF คือ 4,294,967,295 ถ้าอ่านแบบไม่มีเครื่องหมาย และเป็น -1 ถ้าอ่านแบบมีเครื่องหมาย ตัวไหนถูกขึ้นกับโปรแกรมที่เขียนมันล้วน ๆ เราจึงแสดงทั้งสองแบบ เพราะข้อมูลดิบที่คุณกำลังดูไม่ได้บอกว่าเป็นแบบไหน

วาง 0x, 0b หรือเว้นวรรคได้ไหม

ได้ คำนำหน้าจะถูกรับเมื่อมันตรงกับฐานที่คุณเลือก และถูกปฏิเสธเมื่อไม่ตรง เพราะการอ่าน 0xFF เป็นเลขฐานสิบจะให้ผลลัพธ์ที่ผิดแบบเงียบ ๆ ส่วนเว้นวรรค จุลภาค และขีดล่างจะถูกข้ามทุกตำแหน่ง ค่าที่จัดกลุ่มไว้ให้อ่านง่ายจึงวางเข้ามาได้เลย

ทำไมฐานหยุดที่ 36

เพราะมีตัวเลข 10 ตัวกับตัวอักษร 26 ตัว รวมได้ 36 พอดี เกินจากนั้นไม่มีข้อตกลงว่าสัญลักษณ์ถัดไปควรเป็นอะไร ส่วน Base64 มีอยู่จริงแต่เป็นคนละเรื่อง มันเข้ารหัสไบต์ ไม่ได้เขียนตัวเลข ซึ่งเป็นหน้าที่ของเครื่องมือ Base64 บนเว็บนี้