ฉันรู้เกี่ยวกับint
และlong
(ตัวเลข 32 บิตและ 64 บิต) แต่คืออะไรuint
และulong
คืออะไร
ฉันรู้เกี่ยวกับint
และlong
(ตัวเลข 32 บิตและ 64 บิต) แต่คืออะไรuint
และulong
คืออะไร
คำตอบ:
ชนิดข้อมูลดั้งเดิมที่ขึ้นต้นด้วย "u" เป็นเวอร์ชันที่ไม่ได้ลงนามที่มีขนาดบิตเดียวกัน อย่างมีประสิทธิภาพหมายความว่าพวกเขาไม่สามารถจัดเก็บตัวเลขเชิงลบได้ แต่ในทางกลับกันพวกเขาสามารถจัดเก็บจำนวนบวกที่มีขนาดใหญ่เป็นสองเท่าของคู่ที่ลงนาม คู่สัญญาที่ลงนามไม่มีคำนำหน้า "u"
ขีด จำกัด สำหรับ int (32 บิต) คือ:
int: –2147483648 to 2147483647
uint: 0 to 4294967295
และนาน (64 บิต):
long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615
uint
และulong
เป็นเวอร์ชันที่ไม่ได้ลงนามของint
และlong
. นั่นหมายความว่าพวกเขาไม่สามารถติดลบได้ แต่จะมีค่าสูงสุดที่มากกว่า
พิมพ์ Min Max ตามมาตรฐาน CLS int -2,147,483,648 2,147,483,647 ใช่ uint 0 4,294,967,295 เลขที่ long –9,223,372,036,854,775,808 9,223,372,036,854,775,807 ใช่ อู่หลง 0 18,446,744,073,709,551,615 เลขที่
การเขียนตัวอักษร int ไม่ได้ลงนามในรหัสที่มาของคุณคุณสามารถใช้ต่อท้ายu
หรือยกตัวอย่างเช่นU
123U
คุณไม่ควรใช้ UINT และอู่ล่องในอินเตอร์เฟซที่สาธารณะของคุณถ้าคุณต้องการที่จะเป็นCLS ได้มาตรฐาน
อ่านเอกสารสำหรับข้อมูลเพิ่มเติม:
u
วิธีการunsigned
เพื่อให้ulong
เป็นจำนวนมากโดยไม่ต้องเข้าสู่ระบบ คุณสามารถจัดเก็บค่าที่ใหญ่ulong
กว่าlong
ได้ แต่ไม่อนุญาตให้ใช้ตัวเลขเชิงลบ
long
ค่าถูกเก็บไว้ใน 64 บิตกับหลักแรกที่จะแสดงให้เห็นว่าเป็น / จำนวนลบเป็นบวก ในขณะที่ulong
ยังเป็น 64 บิตด้วย 64 บิตทั้งหมดเพื่อจัดเก็บหมายเลข ดังนั้นค่าสูงสุดของ ulong คือ 2 (64) -1 ในขณะที่ long คือ 2 (63) -1
ความแตกต่างคือชนิดข้อมูลที่ไม่ได้ลงชื่อuint
และulong
ไม่ได้ลงนามซึ่งหมายความว่าช่วงนั้นแตกต่างกันพวกเขาไม่ยอมรับค่าลบ:
int range: -2,147,483,648 to 2,147,483,647
uint range: 0 to 4,294,967,295
long range: –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
ulong range: 0 to 18,446,744,073,709,551,615
เป็นเวลานานแล้วที่ฉัน C ++ แต่คำตอบเหล่านี้ไม่ชัดเจน
เท่าที่ขนาดไป 'int' ไม่ใช่อะไร มันเป็นค่าสัญกรณ์ของจำนวนเต็มมาตรฐาน ถือว่าเร็วสำหรับวัตถุประสงค์ของสิ่งต่างๆเช่นการทำซ้ำ มันไม่มีขนาดที่ตั้งไว้ล่วงหน้า
ดังนั้นคำตอบจึงถูกต้องตามความแตกต่างระหว่าง int และ uint แต่จะไม่ถูกต้องเมื่อพูดถึง "ขนาดใหญ่แค่ไหน" หรือช่วงของมันคืออะไร ขนาดนั้นไม่ได้กำหนดหรือถูกต้องมากขึ้นก็จะเปลี่ยนไปตามคอมไพเลอร์และแพลตฟอร์ม
การพูดคุยเกี่ยวกับขนาดของบิตในที่สาธารณะไม่สุภาพ
เมื่อคุณคอมไพล์โปรแกรม int จะมีขนาดตามที่คุณได้ใช้นามธรรม C / C ++ และเปลี่ยนเป็นรหัสเครื่องจักรที่เป็นรูปธรรม
ดังนั้นวันนี้พูดกับคอมไพเลอร์ทั่วไปส่วนใหญ่ถูกต้อง แต่อย่าถือว่าสิ่งนี้
โดยเฉพาะ: หากคุณกำลังเขียนโปรแกรม 32 บิต int จะเป็นอย่างหนึ่ง 64 บิตอาจแตกต่างกันและ 16 บิตก็แตกต่างกัน ฉันได้ดูทั้งสามและสั้น ๆ ที่ 6502 shudder
การค้นหาโดย Google สั้น ๆ แสดงสิ่งนี้: https://www.tutorialspoint.com/cprogramming/c_data_types.htm นี่เป็นข้อมูลที่ดีเช่นกัน: https://docs.oracle.com/cd/E19620-01/805-3024/lp64- 1 / index.html
ใช้ int ถ้าคุณไม่สนใจว่าบิตของคุณมีขนาดใหญ่แค่ไหน มันสามารถเปลี่ยนแปลงได้
ใช้ size_t และ ssize_t หากคุณต้องการทราบว่าสิ่งของมีขนาดใหญ่เพียงใด
หากคุณกำลังอ่านหรือเขียนข้อมูลไบนารีอย่าใช้ int ใช้คีย์เวิร์ดเฉพาะ (โดยปกติจะขึ้นอยู่กับแพลตฟอร์ม / แหล่งที่มา) WinSDK มีตัวอย่างที่ดีและดูแลรักษาได้มากมาย แพลตฟอร์มอื่น ๆ ก็ทำเช่นกัน
ฉันใช้เวลามากมายในการอ่านโค้ดจากคนที่ "SMH" ด้วยความคิดที่ว่าทั้งหมดนี้เป็นแค่วิชาการ / อวดรู้ พวกนี้กินคนที่เขียนโค้ดที่ไม่สามารถเข้าถึงได้ แน่นอนว่ามันง่ายที่จะใช้ประเภท 'int' และใช้งานได้โดยไม่ต้องพิมพ์อะไรเพิ่มเติม เป็นเรื่องที่ต้องทำหลายอย่างเพื่อค้นหาว่าสิ่งที่พวกเขาหมายถึงจริงๆคืออะไรและทำให้มึนงง
มันเป็นการเข้ารหัสที่เส็งเคร็งเมื่อคุณผสม int
ใช้ int และ uint เมื่อคุณต้องการจำนวนเต็มอย่างรวดเร็วและไม่สนใจช่วง (นอกเหนือจากที่ลงชื่อ / ไม่ได้ลงนาม)