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 มากกว่าประเภทนั้น (หมายถึงค่าเหล่านั้นอย่างน้อยไม่จำเป็นต้องมีค่ามากกว่า )