คำหลักที่ไม่ได้ลงชื่อเริ่มต้นเป็นชนิดข้อมูลเฉพาะใน C ++ หรือไม่ ฉันกำลังพยายามเขียนฟังก์ชันสำหรับคลาสสำหรับต้นแบบ:
unsigned Rotate(unsigned object, int count)
แต่ฉันไม่เข้าใจความunsigned
หมายจริงๆ มันไม่ควรเหมือนunsigned int
หรืออะไร?
คำหลักที่ไม่ได้ลงชื่อเริ่มต้นเป็นชนิดข้อมูลเฉพาะใน C ++ หรือไม่ ฉันกำลังพยายามเขียนฟังก์ชันสำหรับคลาสสำหรับต้นแบบ:
unsigned Rotate(unsigned object, int count)
แต่ฉันไม่เข้าใจความunsigned
หมายจริงๆ มันไม่ควรเหมือนunsigned int
หรืออะไร?
คำตอบ:
จากลิงค์ด้านบน:
หลายประเภทเหล่านี้สามารถแก้ไขได้โดยใช้คำหลักที่ลงนามไม่ได้ลงนามสั้นและยาว เมื่อมีการใช้ตัวปรับแต่งชนิดใดประเภทหนึ่งเหล่านี้จะถือว่าประเภทข้อมูลเป็น int
ซึ่งหมายความว่าคุณสามารถสมมติว่าผู้แต่งกำลังใช้ ints
ประเภทจำนวนเต็ม:
short -> signed short
signed short
unsigned short
int -> signed int
signed int
unsigned int
signed -> signed int
unsigned -> unsigned int
long -> signed long
signed long
unsigned long
ระวังถ่าน:
char (is signed or unsigned depending on the implmentation)
signed char
unsigned char
คำหลักที่ไม่ได้ลงชื่อเริ่มต้นเป็นประเภทข้อมูลใน C ++ หรือไม่
ใช่อาจใช้การลงนามและไม่ได้ลงนามเป็นตัวระบุประเภทสแตนด์อโลน
ชนิดข้อมูลจำนวนเต็ม char สั้นยาวและ int สามารถลงนามหรือไม่ได้ลงนามขึ้นอยู่กับช่วงของตัวเลขที่จำเป็นในการแสดง ประเภทที่ลงนามสามารถแสดงได้ทั้งค่าบวกและค่าลบในขณะที่ประเภทที่ไม่ได้ลงชื่อจะแสดงได้เฉพาะค่าบวก (และศูนย์)
จำนวนเต็มไม่ได้ลงนามที่มีบิต n สามารถมีค่าระหว่าง 0 และ 2 n - 1 (ซึ่งเป็น 2 nค่าที่แตกต่างกัน)
อย่างไรก็ตามการลงนามและไม่ได้ลงนามอาจใช้เป็นตัวระบุชนิดแบบสแตนด์อโลนซึ่งมีความหมายเหมือนกับ int ที่ลงชื่อและ int ที่ไม่ได้ลงชื่อตามลำดับ การประกาศสองรายการต่อไปนี้เทียบเท่า:
unsigned NextYear;
unsigned int NextYear;
short
และlong
ยังมีการพิมพ์การปรับเปลี่ยน ถ้าคุณเขียนshort s
หมายถึงที่จริงshort int s
เหมือนจริงหมายถึงunsigned u
unsigned int u
(และunsigned short
หมายถึงunsigned short int
)
คุณสามารถอ่านเกี่ยวกับคำหลักที่ไม่มีการลงชื่อใน c ++ อ้างอิง
มีสองประเภทที่แตกต่างกันในเรื่องนี้ลงชื่อและยกเลิกการลงนาม ค่าเริ่มต้นสำหรับจำนวนเต็มถูกลงนามซึ่งหมายความว่าสามารถมีค่าเป็นลบได้
ในระบบ 32 บิตจำนวนเต็มคือ 32 บิตซึ่งหมายความว่าสามารถมีมูลค่า ~ 4 พันล้าน
และเมื่อมีการลงนามนั่นหมายความว่าคุณต้องแยกมันออกจาก -2 พันล้านถึง +2 พันล้าน
เมื่อไม่ได้ลงนาม แต่ค่าจะไม่มีตัวเลขติดลบดังนั้นสำหรับจำนวนเต็มจะหมายถึง 0 ถึง +4 พันล้าน
unsigned int
ใช่มันหมายความว่า จะใช้เป็นที่ว่าถ้าคุณไม่ได้ระบุชนิดของข้อมูลใน C int
มีหลายสถานที่ที่มันเป็นเพียงแค่การสันนิษฐานว่า ตัวอย่างเช่นลองใช้ประเภทการส่งคืนฟังก์ชัน
หูดนี้ส่วนใหญ่ถูกกำจัดไปแล้ว แต่คุณกำลังพบร่องรอยสุดท้ายที่นี่ IMHO รหัสควรได้รับการแก้ไขเพื่อบอกว่าunsigned int
เพื่อหลีกเลี่ยงความสับสนที่คุณกำลังประสบอยู่