เลขจำนวนเต็มที่ลงนามใน C แทนตัวเลข หากaและbเป็นตัวแปรของประเภทจำนวนเต็มที่ลงนามมาตรฐานจะไม่ต้องการให้คอมไพเลอร์สร้างที่a+=bเก็บนิพจน์เป็นaสิ่งอื่นใดนอกจากผลรวมเลขคณิตของค่าที่เกี่ยวข้อง เพื่อให้แน่ใจว่าหากผลรวมเลขคณิตไม่พอดีaตัวประมวลผลอาจไม่สามารถใส่ได้ แต่มาตรฐานจะไม่ต้องการให้คอมไพเลอร์ตัดทอนหรือตัดค่าหรือทำสิ่งอื่นสำหรับเรื่องนั้นถ้าค่าที่เกิน ข้อ จำกัด สำหรับประเภทของพวกเขา โปรดทราบว่าแม้ว่ามาตรฐานไม่จำเป็นต้องมีการใช้งาน C จะได้รับอนุญาตให้ดักจับทางคณิตศาสตร์ล้นด้วยค่าที่ลงนามแล้ว
จำนวนเต็มที่ไม่ได้ลงนามใน C ทำหน้าที่เป็นวงแหวนพีชคณิตนามธรรมของจำนวนเต็มซึ่งสอดคล้องกันแบบโมดูโลกำลังสองบางส่วนยกเว้นในสถานการณ์ที่เกี่ยวข้องกับการแปลงหรือการดำเนินการด้วยประเภทที่มีขนาดใหญ่กว่า การแปลงจำนวนเต็มขนาดใด ๆเป็นชนิดที่ไม่ได้ลงนามแบบ 32 บิตจะทำให้สมาชิกที่สอดคล้องกับสิ่งต่าง ๆ ที่สอดคล้องกับจำนวนเต็ม mod 4,294,967,296 เหตุผลที่ลบ 3 จาก 2 ให้ผล 4,294,967,295 คือการเพิ่มบางอย่างที่สอดคล้องกันกับ 3 เข้ากับบางอย่างที่สอดคล้องกันกับ 4,294,967,295 จะให้บางสิ่งที่สอดคล้องกันกับ 2
แหวนแบบพีชคณิตนามธรรมมักเป็นสิ่งที่มีประโยชน์ แต่น่าเสียดายที่ C ใช้ความเซ็นชื่อเป็นปัจจัยในการตัดสินใจว่าประเภทควรเป็นแหวนหรือไม่ ค่าที่ไม่ได้รับการลงนามจะถือว่าเป็นตัวเลขมากกว่าสมาชิกวงแหวนเมื่อถูกแปลงเป็นประเภทที่มีขนาดใหญ่กว่าและค่าที่ไม่ได้ลงนามนั้นเล็กกว่าintรับการแปลงเป็นตัวเลขเมื่อดำเนินการทางคณิตศาสตร์ใด ๆ ก็ตาม ถ้าvเป็นuint32_tซึ่งเท่ากับ4,294,967,294แล้วควรจะทำv*=v; v=4น่าเสียดายที่ถ้าintเป็น 64 บิตก็ไม่ได้บอกว่าv*=v;จะทำอะไรได้
ให้มาตรฐานเหมือนเดิมฉันขอแนะนำให้ใช้ประเภทที่ไม่ได้ลงนามในสถานการณ์ที่ต้องการพฤติกรรมที่เกี่ยวข้องกับวงแหวนเชิงพีชคณิตและประเภทที่เซ็นชื่อเมื่อต้องการแสดงตัวเลข มันโชคร้ายที่ C ดึงความแตกต่างในแบบที่เคยทำ แต่พวกมันคือสิ่งที่พวกเขาเป็น