longและlong intเหมือนกัน เพื่อให้มีและlong long long long intในทั้งสองกรณีintนี้เป็นตัวเลือก
ในฐานะที่เป็นความแตกต่างระหว่างทั้งสองชุด, c ++ เอกสารมาตรฐานช่วงขั้นต่ำสำหรับแต่ละและที่long longอยู่ที่อย่างน้อยlongกว้างเท่า
ส่วนการควบคุมของมาตรฐาน (C ++ 11 แต่มีมานานแล้ว) สำหรับหนึ่ง3.9.1 Fundamental typesส่วน 2 (ส่วนต่อมาให้กฎที่คล้ายกันสำหรับประเภทอินทิกรัลที่ไม่ได้ลงนาม):
จำนวนเต็มมาตรฐานที่ลงนามแล้วมีห้าประเภท ได้แก่ ถ่านที่ลงนามไว้, int สั้น, int, long int และ long long int ในรายการนี้แต่ละประเภทมีพื้นที่เก็บข้อมูลอย่างน้อยเท่ากับพื้นที่นำหน้าในรายการ
นอกจากนี้ยังมีตารางที่ 9 ใน7.1.6.2 Simple type specifiersซึ่งแสดง "การแมป" ของตัวระบุเป็นประเภทจริง (แสดงว่าintเป็นตัวเลือก) ส่วนที่แสดงอยู่ด้านล่าง:
Specifier(s) Type
------------- -------------
long long int long long int
long long long long int
long int long int
long long int
สังเกตความแตกต่างระหว่างตัวระบุและชนิด ตัวระบุเป็นวิธีที่คุณบอกคอมไพเลอร์ว่าเป็นประเภทใด แต่คุณสามารถใช้ตัวระบุที่แตกต่างกันเพื่อจบที่ประเภทเดียวกัน
ดังนั้นlongด้วยตัวของมันเองไม่ใช่ประเภทหรือตัวดัดแปลงตามคำถามของคุณมันเป็นเพียงตัวระบุสำหรับlong intประเภท เหมือนกันสำหรับlong longการเป็นตัวระบุสำหรับlong long intประเภท
แม้ว่ามาตรฐาน C ++ เองจะไม่ระบุช่วงต่ำสุดของประเภทอินทิกรัล แต่ก็อ้างถึง C99 1.2 Normative referencesซึ่งเป็นการนำไปใช้ ดังนั้นช่วงที่น้อยที่สุดตามที่กำหนดไว้C99 5.2.4.2.1 Sizes of integer types <limits.h>จึงมีผลบังคับใช้
ในแง่ของlong doubleที่จริงแล้วเป็นค่าจุดลอยตัวมากกว่าจำนวนเต็ม ในทำนองเดียวกันกับประเภทอินทิกรัลมันต้องมีความแม่นยำอย่างน้อยที่สุดเท่าที่ a doubleและเพื่อให้ค่า superset มากกว่าประเภทนั้น (หมายถึงค่าเหล่านั้นอย่างน้อยไม่จำเป็นต้องมีค่ามากกว่า )