หากคุณกำลังมองหาง่ายหนึ่งซับนี้เป็นทางออกที่น่าเชื่อถือมากที่สุดที่ผมเคยพบว่าผลตอบแทนที่ได้64หรือ32 มันไม่สนหรอกว่าคุณกำลังใช้ ARM หรือไม่และมันควรจะทำงานในระบบใด ๆ โดยใช้ทุบตีหรือการดวลจุดโทษ
ระวังนี่จะถือว่าระบบเป็นแบบ 32 บิตหรือ 64 บิต ดูคำอธิบายของฉันด้านล่างหากคุณต้องการตรวจสอบ 8-16- หรือสถาปัตยกรรมอื่นบิต
[$ ((0xffffffff)) -eq -1] && echo 32 || echo 64
เกิดอะไรขึ้นที่นี่?
ตรรกะนั้นง่ายมากและทุกอย่างก็ลงเอยด้วยวิธีการที่คอมพิวเตอร์เก็บจำนวนเต็มลงนาม สถาปัตยกรรม 32- บิตมีเพียง 32 บิตที่สามารถใช้สำหรับการจัดเก็บจำนวนเต็มลงนามในขณะที่สถาปัตยกรรม 64- บิตมี 64 บิต! กล่าวอีกนัยหนึ่งชุดของจำนวนเต็มที่สามารถเก็บได้นั้นมี จำกัด ครึ่งหนึ่งของชุดนี้แสดงถึงจำนวนลบและครึ่งหนึ่งแสดงถึงจำนวนบวก เลขจำนวนเต็มที่ลงนามเท่ากับ -1 จะแสดงเป็นจำนวนมากที่สุดที่สามารถเก็บไว้ในจำนวนบิตที่กำหนดสำหรับสถาปัตยกรรมนั้น บนระบบ 32 บิต -1 สามารถแสดงด้วยค่าเลขฐานสิบหก 0xFFFFFFFF (ซึ่งเป็น 32 บิตบิตซึ่งเท่ากับ 1 ทั้งหมด) บนระบบ 64 บิต 0xFFFFFFFF แปลเป็น 4,294,967,295 ฐาน 10 ขณะที่ 0xFFFFFFFFFFFFFFFF เป็นตัวแทนสำหรับ -1) คุณสามารถดูว่าสิ่งนี้จะปรับขนาดได้อย่างง่ายดายสำหรับระบบที่ 8- หรือ 16- บิตเช่นกันซึ่งจะเท่ากับ -1 ที่ 0xFF และ 0xFFFF
uname -m
และuname -m
?