อ่าน 7 นาที
จำนวนเต็ม (วิทยาการคอมพิวเตอร์)
ในวิทยาการคอมพิวเตอร์จำนวนเต็มคือข้อมูลประเภทจำนวนเต็มซึ่ง เป็น ประเภทข้อมูลที่แสดงช่วงของจำนวนเต็ม ทาง...
จำนวนเต็ม (วิทยาการคอมพิวเตอร์)
ในวิทยาการคอมพิวเตอร์จำนวนเต็มคือข้อมูลประเภทจำนวนเต็มซึ่ง เป็น ประเภทข้อมูลที่แสดงช่วงของจำนวนเต็ม ทาง คณิตศาสตร์[ 1 ]ประเภทข้อมูลจำนวนเต็มอาจมีขนาดแตกต่างกันและอาจอนุญาตให้มีค่าลบหรือไม่ก็ได้ โดยทั่วไปแล้ว จำนวนเต็มจะถูกแสดงในคอมพิวเตอร์เป็นกลุ่มของตัวเลขไบนารี (บิต) ขนาดของกลุ่มจะแตกต่างกัน ดังนั้นชุดขนาดของจำนวนเต็มที่มีให้ใช้งานจึงแตกต่างกันไปในคอมพิวเตอร์ประเภทต่างๆ ฮาร์ดแวร์คอมพิวเตอร์เกือบทุกครั้งจะมีวิธีการแสดงรีจิสเตอร์ โปรเซสเซอร์ หรือที่อยู่หน่วยความจำเป็นจำนวนเต็ม
คุณค่าและการเป็นตัวแทน
ค่าของรายการที่มีประเภทจำนวนเต็มคือจำนวนเต็มทางคณิตศาสตร์ที่สอดคล้องกับรายการนั้น ประเภทจำนวนเต็มอาจเป็นแบบไม่มีเครื่องหมาย (สามารถแสดงเฉพาะจำนวนเต็มที่ไม่เป็นลบ) หรือแบบมีเครื่องหมาย (สามารถแสดงจำนวนเต็มลบได้เช่นกัน) [ 2 ]
โดยทั่วไปค่าจำนวนเต็มจะถูกระบุในซอร์สโค้ดของโปรแกรมเป็นลำดับของตัวเลขที่อาจมีเครื่องหมาย + หรือ − นำหน้า ภาษาโปรแกรมบางภาษาอนุญาตให้ใช้สัญกรณ์อื่น เช่นเลขฐานสิบหก (ฐาน 16) หรือเลขฐานแปด (ฐาน 8) ภาษาโปรแกรมบางภาษายังอนุญาตให้ใช้ตัวคั่นกลุ่มตัวเลขได้อีก ด้วย [ 3 ]
การแสดงข้อมูลภายในนี้คือวิธีการจัดเก็บค่าในหน่วยความจำของคอมพิวเตอร์ ซึ่งแตกต่างจากจำนวนเต็มทางคณิตศาสตร์ ข้อมูลทั่วไปในคอมพิวเตอร์จะมีค่าต่ำสุดและค่าสูงสุดที่เป็นไปได้
การ แสดงจำนวนเต็มบวกที่พบได้บ่อยที่สุดคือสตริงของบิตโดยใช้ระบบเลขฐานสอง ลำดับของไบต์หน่วยความจำที่จัดเก็บบิตจะแตกต่างกันไป ดูที่เอนเดียนเนสความกว้างความแม่นยำหรือบิตเนส[ 4 ]ของชนิดข้อมูลจำนวนเต็มคือจำนวนบิตในการแสดง ชนิดข้อมูลจำนวนเต็มที่มีnบิตสามารถเข้ารหัสตัวเลขได้ 2n ตัวตัวอย่างเช่น ชนิดข้อมูลที่ไม่มีเครื่องหมายมักจะแสดงค่าที่ไม่เป็นลบตั้งแต่ 0 ถึง2n − 1 บางครั้งมี การใช้การเข้ารหัสค่าจำนวนเต็มเป็นรูปแบบบิตอื่นๆ เช่นเลข ฐานสิบที่เข้ารหัสแบบไบนารีหรือรหัสเกรย์หรือเป็นรหัสอักขระที่พิมพ์ เช่นASCII
ในระบบคอมพิวเตอร์แบบไบนารีมีวิธีที่รู้จักกันดีอยู่สี่วิธีในการแสดงจำนวนที่มีเครื่องหมาย วิธี ที่พบมากที่สุดคือ การใช้ส่วนเติมเต็มสอง (two's complement ) ซึ่งช่วยให้ชนิดข้อมูลจำนวนเต็มที่มีเครื่องหมายnบิต สามารถแสดงจำนวนตั้งแต่−2 ( n −1)ถึง2 ( n −1) − 1ได้ การคำนวณด้วยส่วนเติมเต็มสองนั้นสะดวกเพราะมีการจับคู่แบบหนึ่งต่อหนึ่ง ที่สมบูรณ์แบบ ระหว่างการแสดงค่าและค่า (โดยเฉพาะอย่างยิ่งไม่มี +0 และ −0 แยกต่างหาก ) และเนื่องจากการบวกการลบและการคูณไม่จำเป็นต้องแยกแยะระหว่างชนิดข้อมูลที่มีเครื่องหมายและไม่มีเครื่องหมาย วิธีอื่นๆ ที่เป็นไปได้ ได้แก่ ไบนารีแบบออฟเซ็ต(offset binary) ไบนารีแบบ เครื่องหมาย-ขนาด ( sign-magnitude ) และ ไบนารีแบบส่วนเติมเต็ม หนึ่ง (ones' complement )
ภาษาคอมพิวเตอร์บางภาษา กำหนดขนาดของจำนวนเต็มในลักษณะที่ไม่ขึ้นกับเครื่อง ในขณะที่บางภาษามีคำจำกัดความที่แตกต่างกันไปขึ้นอยู่กับขนาดของคำในหน่วยประมวลผลพื้นฐาน ไม่ใช่ทุกการใช้งานของภาษาที่จะกำหนดตัวแปรที่มีขนาดจำนวนเต็มทุกขนาด และขนาดที่กำหนดไว้อาจไม่แตกต่างกันอย่างชัดเจนในการใช้งานเฉพาะนั้นๆ จำนวนเต็มในภาษาโปรแกรม หนึ่ง อาจมีขนาดแตกต่างกันในภาษาอื่น บนหน่วยประมวลผลที่แตกต่างกัน หรือในบริบทการทำงานที่มีบิตต่างกัน ดู§คำ
สถาปัตยกรรมคอมพิวเตอร์รุ่นเก่าบางรุ่นใช้การแสดงจำนวนเต็มในรูปแบบเลขฐานสิบ ซึ่งจัดเก็บในรูปแบบเลขฐานสองแบบเข้ารหัส (BCD)หรือรูปแบบอื่นๆ ค่าเหล่านี้โดยทั่วไปต้องการขนาดข้อมูล 4 บิตต่อหลักทศนิยม (บางครั้งเรียกว่าnibble ) โดยปกติจะมีบิตเพิ่มเติมสำหรับเครื่องหมาย ซีพียูสมัยใหม่หลายตัวให้การสนับสนุนจำนวนเต็มทศนิยมแบบจำกัดในฐานะชนิดข้อมูลเพิ่มเติม โดยมีคำสั่งสำหรับการแปลงค่าดังกล่าวไปและกลับจากค่าไบนารี ขึ้นอยู่กับสถาปัตยกรรม จำนวนเต็มทศนิยมอาจมีขนาดคงที่ (เช่น 7 หลักทศนิยมบวกเครื่องหมายพอดีกับคำ 32 บิต) หรืออาจมีความยาวแปรผันได้ (สูงสุดไม่เกินขนาดหลักใดหลักหนึ่ง) โดยทั่วไปจะใช้สองหลักต่อไบต์ (octet)
ประเภทข้อมูลจำนวนเต็มทั่วไป
| บิต | ชื่อ | ช่วง (โดยสมมติว่าเป็นส่วนเติมเต็มสองสำหรับจำนวนที่มีเครื่องหมาย ) | ตัวเลขทศนิยม | การใช้งาน | การนำไปใช้ | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ซี / ซี++ | ซี# | ปาสคาลและเดลฟี | ชวา | SQL [ a ] | ฟอร์แทรน | ดี | สนิม | |||||
| 4 | กัดเล็กน้อยเซมิออกเต็ต | ลงชื่อ:จาก −8 ถึง 7 จาก −(2 3 ) ถึง 2 3 − 1 | 0.9 | เลข ฐานสองแบบเข้ารหัสทศนิยม (Binary-coded decimal)คือการแสดงผลด้วยตัวเลขทศนิยมหลักเดียว | — | |||||||
| จำนวนเต็มบวก:ตั้งแต่ 0 ถึง 15 ซึ่งเท่ากับ2 4 − 1 | 1.2 | |||||||||||
| 8 | ไบต์ , อ็อกเท็ต , i8, u8 | ลงชื่อ:จาก −128 ถึง 127 จาก −(2 7 ) ถึง2 7 − 1 | 2.11 | อักขระASCII หน่วยรหัสในการเข้ารหัสอักขระUTF-8 | int8_t, signed char[ข] | sbyte,System.SByte | Shortint | byte,java.lang.Byte | tinyint | INTEGER[ค] | byte | i8 |
| จำนวนเต็มบวก:ตั้งแต่ 0 ถึง 255 ซึ่งเท่ากับ2 8 − 1 | 2.41 | uint8_t, unsigned char[ข] | byte,System.Byte | Byte | ไม่มีข้อมูล | unsigned tinyint | ไม่มีข้อมูล | ubyte | u8 | |||
| 16 | ครึ่งคำ, คำ , สั้น, i16, u16 | ลงชื่อ:จาก −32,768 ถึง 32,767 จาก −(2 15 ) ถึง2 15 − 1 | 4.52 | อักขระUCS-2 คือ หน่วยรหัสในการเข้ารหัสอักขระUTF-16 | int16_t, short, [ b ] int[ b ] | short,System.Int16 | Smallint | short,java.lang.Short | smallint | INTEGER[ค] | short | i16 |
| ตัวเลขที่ไม่มีเครื่องหมาย:ตั้งแต่ 0 ถึง 65,535 ซึ่งเท่ากับ2 16 − 1 | 4.82 | uint16_t, unsigned, [ b ] unsigned int[ b ] | ushort,System.UInt16 | Word | char[ d ] ,java.lang.Character | unsigned smallint | ไม่มีข้อมูล | ushort | u16 | |||
| 32 | คำ, ยาว , คำคู่, คำยาว, จำนวนเต็ม, i32, u32 | ลงชื่อ:จาก−2,147,483,648 ถึง 2,147,483,647จาก −(2 31 ) ถึง2 31 − 1 | 9.33 | อักขระUTF-32 , สีจริงพร้อมค่าอัลฟา, FourCC , ตัวชี้ในระบบประมวลผล 32 บิต | int32_t, int, [ b ] long[ b ] | int,System.Int32 | LongInt; Integer[ e ] | int,java.lang.Integer | int | INTEGER[ค] | int | i32 |
| ตัวเลขที่ไม่มีเครื่องหมาย:ตั้งแต่ 0 ถึง 4,294,967,295 ซึ่งเท่ากับ2³² − 1 | 9.63 | uint32_t, unsigned, [ b ]unsigned int , [ b ] unsigned long[ b ] | uint,System.UInt32 | LongWord; DWord; Cardinal[ e ] | ไม่มีข้อมูล | unsigned int | ไม่มีข้อมูล | uint | u32 | |||
| 64 | คำ, คำคู่, คำยาว, ยาว, ยาวมาก, สี่เหลี่ยม, คำสี่ส่วน, คำควอด, อินท์64, ไอ64, ยู64 | ลงชื่อ:จาก−(2 63 )ถึง2 63 − 1 | 18.96 | เวลา (เช่น มิลลิวินาที นับตั้งแต่ยุค Unix ) ตัวชี้ในระบบคอมพิวเตอร์ 64 บิต | int64_t, long, [ b ] long long[ b ] | long,System.Int64 | Int64 | long,java.lang.Long | bigint | INTEGER[ค] | long | i64 |
| ไม่มีเครื่องหมาย:ตั้งแต่ 0 ถึง2 64 − 1 | 19.27 | uint64_t, unsigned long long[ข] | ulong,System.UInt64 | UInt64;QWord | ไม่มีข้อมูล | unsigned bigint | ไม่มีข้อมูล | ulong | u64 | |||
| 128 | octaword, double quadword, i128, u128 | ลงชื่อ:จาก−(2 127 )ถึง2 127 − 1 | 38.23 | การคำนวณทางวิทยาศาสตร์ที่ซับซ้อน | มีให้ใช้งานเฉพาะในรูปแบบส่วนขยายที่ไม่เป็นมาตรฐานหรือเฉพาะคอมไพเลอร์เท่านั้น | cent[ f ] | i128 | |||||
| ไม่มีเครื่องหมาย:ตั้งแต่ 0 ถึง2 128 − 1 | 38.53 | ucent[ f ] | u128 | |||||||||
| n | จำนวนเต็มn บิต (กรณีทั่วไป) | ลงชื่อ: −(2 n −1 ) ถึง ( 2 n −1 − 1 ) | ( n − 1 ) log 10 2 | C23: _BitInt(n),signed _BitInt(n) | เอดา :range-2**(n-1)..2**(n-1)-1 | |||||||
| ไม่มีเครื่องหมาย: 0 ถึง ( 2 n − 1 ) | n log 10 2 | C23:unsigned _BitInt(n) | Ada: , ; ไลบรารีมาตรฐานหรือไลบรารีหรือคลาสการคำนวณเลขคณิตแบบกำหนดเองของบุคคลที่สามในหลายภาษา เช่น Python, C++ เป็นต้น range0..2**n-1mod2**nBigDecimalDecimal | |||||||||
ซีพียูแต่ละรุ่นรองรับชนิดข้อมูลจำนวนเต็มที่แตกต่างกัน โดยทั่วไปแล้ว ฮาร์ดแวร์จะรองรับทั้งชนิดข้อมูลที่มีเครื่องหมายและไม่มีเครื่องหมาย แต่จะมีขนาดความกว้างให้เลือกเพียงชุดเล็กๆ เท่านั้น
ตารางด้านบนแสดงรายการความกว้างของชนิดข้อมูลจำนวนเต็มที่ฮาร์ดแวร์ของโปรเซสเซอร์ทั่วไปรองรับ ภาษาโปรแกรมระดับสูงให้ความเป็นไปได้มากกว่านั้น โดยทั่วไปจะมีชนิดข้อมูลจำนวนเต็มแบบ 'ความกว้างสองเท่า' ซึ่งมีจำนวนบิตเป็นสองเท่าของชนิดข้อมูลที่ฮาร์ดแวร์รองรับที่ใหญ่ที่สุด ภาษาโปรแกรมหลายภาษายังมี ชนิด ข้อมูลแบบบิตฟิลด์ (จำนวนบิตที่ระบุ โดยปกติจะถูกจำกัดให้น้อยกว่าความกว้างสูงสุดที่ฮาร์ดแวร์รองรับ) และ ชนิด ข้อมูลแบบช่วง (ที่สามารถแสดงเฉพาะจำนวนเต็มในช่วงที่ระบุเท่านั้น)
บางภาษา เช่นLisp , Smalltalk , REXX , Haskell , PythonและRakuรองรับ จำนวนเต็มที่ มีความแม่นยำสูง (หรือที่เรียกว่าจำนวนเต็มที่มีความแม่นยำอนันต์หรือbignums ) ภาษาอื่นๆ ที่ไม่รองรับแนวคิดนี้เป็นโครงสร้างระดับบนสุด อาจมีไลบรารีที่ใช้แทนจำนวนขนาดใหญ่มากโดยใช้อาร์เรย์ของตัวแปรขนาดเล็ก เช่นjava.math.BigIntegerคลาสของ Java หรือแพ็กเกจ " " ของPerl [ 7 ]สิ่งเหล่านี้ใช้หน่วยความจำของคอมพิวเตอร์มากเท่าที่จำเป็นในการจัดเก็บตัวเลข อย่างไรก็ตาม คอมพิวเตอร์มีพื้นที่จัดเก็บจำกัด ดังนั้นจึงสามารถแสดงจำนวนเต็มทางคณิตศาสตร์ได้เพียงบางส่วนเท่านั้น แผนการเหล่านี้รองรับจำนวนขนาดใหญ่มาก ตัวอย่างเช่น หน่วยความจำหนึ่งกิโลไบต์สามารถใช้จัดเก็บตัวเลขที่มีความยาวได้ถึง 2466 หลักทศนิยม bigint
ชนิดข้อมูล บูลีนเป็นชนิดข้อมูลที่สามารถแทนค่าได้เพียงสองค่า คือ 0 และ 1 ซึ่งโดยทั่วไปจะระบุด้วยค่าเท็จและค่าจริงตามลำดับ ชนิดข้อมูลนี้สามารถจัดเก็บในหน่วยความจำได้โดยใช้บิตเดียว แต่โดยทั่วไปจะใช้ไบต์เต็มเพื่อความสะดวกในการระบุตำแหน่งและความเร็วในการเข้าถึง
หน่วยข้อมูลสี่บิตเรียกว่านิบเบิล (nibble ) (ซึ่งหมายถึงเล็กกว่าคำที่กัด เมื่อรับประทานอาหาร ) หรือไนบเบิล (nybble ซึ่งเป็นการเล่นคำกับคำว่าไบต์ ) หนึ่งนิบเบิลเทียบเท่ากับหนึ่งหลักในเลขฐานสิบหกและเก็บหนึ่งหลักหรือรหัสเครื่องหมายในเลขฐานสอง
ไบต์และอ็อกเท็ต
เดิมที คำว่าไบต์หมายถึง 'หน่วยความจำที่เล็กที่สุดที่สามารถเข้าถึงได้' ในอดีตมีการใช้ไบต์ขนาด 5, 6, 7, 8 และ 9 บิต นอกจากนี้ยังมีคอมพิวเตอร์ที่สามารถเข้าถึงบิตแต่ละบิตได้ ('เครื่องที่เข้าถึงด้วยบิต') หรือที่สามารถเข้าถึงเฉพาะปริมาณ 16 หรือ 32 บิตเท่านั้น ('เครื่องที่เข้าถึงด้วยเวิร์ด') โดยปกติแล้วคำว่าไบต์จะไม่ถูกนำมาใช้ร่วมกับเครื่องที่เข้าถึงด้วยบิตและเวิร์ดเลย
คำว่าอ็อกเท็ต (octet)หมายถึงปริมาณ 8 บิตเสมอ โดยส่วนใหญ่ใช้ในด้านเครือข่ายคอมพิวเตอร์ซึ่งคอมพิวเตอร์ที่มีความกว้างของไบต์ต่างกันอาจต้องสื่อสารกัน
ในปัจจุบัน คำว่าไบต์มักหมายถึงแปดบิตเสมอ เนื่องจากขนาดอื่นๆ เลิกใช้ไปแล้ว ดังนั้นไบต์จึงมีความหมายเหมือนกับอ็อกเท็ต
คำ
คำว่า 'word' ใช้สำหรับกลุ่มบิตขนาดเล็กที่ได้รับการประมวลผลพร้อมกันโดยโปรเซสเซอร์ที่มีสถาปัตยกรรมเฉพาะ ขนาดของ word จึงขึ้นอยู่กับ CPU แต่ละรุ่น มีการใช้ขนาด word ที่แตกต่างกันมากมาย รวมถึง 6, 8, 12, 16, 18, 24, 32, 36, 39, 40, 48, 60 และ 64 บิต เนื่องจากเป็นเรื่องของสถาปัตยกรรม ขนาดของwordจึงมักถูกกำหนดโดย CPU รุ่นแรกในตระกูล มากกว่าคุณลักษณะของ CPU ที่เข้ากันได้ในภายหลัง ความหมายของคำที่ได้มาจากwordเช่นlongword , doubleword , quadwordและhalfwordก็แตกต่างกันไปตาม CPU และระบบปฏิบัติการ[ 8 ]
ในทางปฏิบัติแล้ว โปรเซสเซอร์เดสก์ท็อปรุ่นใหม่เกือบทั้งหมดสามารถใช้คำขนาด 64 บิตได้ แม้ว่าโปรเซสเซอร์ฝังตัวที่มีขนาดคำ 8 และ 16 บิตยังคงพบได้ทั่วไปก็ตามความยาวคำ 36 บิต นั้น เป็นเรื่องปกติในยุคแรกเริ่มของคอมพิวเตอร์
สาเหตุสำคัญประการหนึ่งที่ทำให้ซอฟต์แวร์ไม่สามารถพกพาได้คือ การสันนิษฐานที่ผิดพลาดว่าคอมพิวเตอร์ทุกเครื่องมีขนาดคำ (word size) เท่ากับคอมพิวเตอร์ที่โปรแกรมเมอร์ใช้ ตัวอย่างเช่น หากโปรแกรมเมอร์ที่ใช้ภาษา Cประกาศintตัวแปรผิดพลาดโดยใช้ค่าที่มากกว่า2¹⁵⁻¹โปรแกรมจะทำงานล้มเหลวบนคอมพิวเตอร์ที่มีจำนวนเต็ม 16 บิต ตัวแปรนั้นควรประกาศเป็น `int` longซึ่งมีอย่างน้อย 32 บิตบนคอมพิวเตอร์ทุกเครื่อง โปรแกรมเมอร์อาจสันนิษฐานผิดพลาดว่าตัวชี้ (pointer) สามารถแปลงเป็นจำนวนเต็มได้โดยไม่สูญเสียข้อมูล ซึ่งอาจใช้ได้กับคอมพิวเตอร์ 32 บิต (บางเครื่อง) แต่จะล้มเหลวบนคอมพิวเตอร์ 64 บิตที่มีตัวชี้ 64 บิตและจำนวนเต็ม 32 บิต ปัญหานี้ได้รับการแก้ไขโดย C99 ในไฟล์ stdint.hในรูปแบบของintptr_t`int`
บิต ของโปรแกรมอาจหมาย ถึงขนาดคำ (หรือบิต) ของโปรเซสเซอร์ที่โปรแกรมทำงานอยู่ หรืออาจหมายถึงความกว้างของที่อยู่หน่วยความจำหรือตัวชี้ ซึ่งอาจแตกต่างกันระหว่างโหมดการทำงานหรือบริบท ตัวอย่างเช่นMicrosoft Windows เวอร์ชัน 64 บิต รองรับไบนารี 32 บิตที่มีอยู่ และโปรแกรมที่คอมไพล์สำหรับx32 ABI ของ Linux ทำงานในโหมด 64 บิต แต่ใช้ที่อยู่หน่วยความจำ 32 บิต[ 9 ]
จำนวนเต็มมาตรฐาน
ขนาดจำนวนเต็มมาตรฐานนั้นขึ้นอยู่กับแพลตฟอร์ม
ในภาษาซีจะใช้สัญลักษณ์intและต้องมีขนาดอย่างน้อย 16 บิต ระบบ Windows และ Unix มีตัวจัดการหน่วยความจำแบบ 32 บิตintทั้งในสถาปัตยกรรม 32 บิตและ 64 บิต
จำนวนเต็มสั้น
จำนวนเต็มสั้นสามารถใช้แทนจำนวนเต็มได้โดยใช้พื้นที่จัดเก็บน้อยกว่า แต่มีช่วงค่าที่แคบกว่า เมื่อเทียบกับจำนวนเต็มมาตรฐานบนเครื่องเดียวกัน
ในภาษา Cจะใช้สัญลักษณ์ โดยshortจะต้องมีขนาดอย่างน้อย 16 บิต และมักจะมีขนาดเล็กกว่าจำนวนเต็มมาตรฐาน แต่ไม่จำเป็นต้องเป็นเช่นนั้น[ 10 ] [ 11 ]โปรแกรมที่สอดคล้องกับมาตรฐานสามารถสันนิษฐานได้ว่าสามารถจัดเก็บค่าระหว่าง−(2 15 − 1) [ 12 ]และ2 15 − 1 ได้อย่างปลอดภัย [ 13 ]แต่ไม่สามารถสันนิษฐานได้ว่าช่วงค่าจะไม่ใหญ่กว่านั้น ในภาษา Java ค่า a shortจะเป็นจำนวนเต็ม 16 บิตเสมอ ใน Windows APIชนิดข้อมูล a SHORTถูกกำหนดให้เป็นจำนวนเต็ม 16 บิตแบบมีเครื่องหมายบนเครื่องทุกเครื่อง[ 8 ]
| ภาษาโปรแกรม | ชื่อประเภทข้อมูล | เครื่องหมาย | ขนาดเป็นไบต์ | ค่าต่ำสุด | ค่าสูงสุด |
|---|---|---|---|---|---|
| ซีและซี++ | short | ลงนาม | 2 | −32,767 [กรัม] | +32,767 |
unsigned short | ไม่มีลายเซ็น | 2 | 0 | 65,535 | |
| ซี# | short | ลงนาม | 2 | −32,768 | +32,767 |
ushort | ไม่มีลายเซ็น | 2 | 0 | 65,535 | |
| ชวา | short | ลงนาม | 2 | −32,768 | +32,767 |
| คำสั่ง SQL | smallint | ลงนาม | 2 | −32,768 | +32,767 |
จำนวนเต็มยาว
จำนวนเต็มแบบยาว (Long integer)สามารถแทนจำนวนเต็มที่มีช่วงค่ามากกว่าหรือเท่ากับจำนวนเต็มมาตรฐาน (Standard integer) บนเครื่องเดียวกันได้
ในภาษา Cจะใช้สัญลักษณ์ โดยlongจะต้องมีขนาดอย่างน้อย 32 บิต และอาจจะใหญ่กว่าหรือเล็กกว่าจำนวนเต็มมาตรฐานก็ได้ โปรแกรมที่สอดคล้องกับมาตรฐานสามารถสันนิษฐานได้ว่าสามารถจัดเก็บค่าระหว่าง−(2 31 − 1) [ 12 ]และ2 31 − 1 , [ 13 ] ได้อย่างปลอดภัย แต่ไม่สามารถสันนิษฐานได้ว่าช่วงค่าจะไม่ใหญ่กว่านี้
| ภาษาโปรแกรม | ประเภทการอนุมัติ | แพลตฟอร์ม | ชื่อประเภทข้อมูล | พื้นที่จัดเก็บข้อมูลในหน่วยไบต์ | ช่วง ลายเซ็น | ช่วงที่ ไม่มีเครื่องหมาย |
|---|---|---|---|---|---|---|
| C ISO/ANSI C99 | มาตรฐานสากล | ยูนิกซ์ (ระบบ 16/32 บิต); [ 8 ]วินโดวส์ (ระบบ 16/32/64 บิต) [ 8 ] | long | 4 (ข้อกำหนดขั้นต่ำ 4) | −(2 31 − 1) ถึง (2 31 − 1) | 0 ถึง (2 32 − 1) (ข้อกำหนดขั้นต่ำ) |
| C ISO/ANSI C99 | มาตรฐานสากล | ยูนิกซ์ (ระบบ 64 บิต) [ 8 ] [ 11 ] | long | 8 (ข้อกำหนดขั้นต่ำ 4) | −(2 63 − 1) ถึง (2 63 − 1) | 0 ถึง (2 64 − 1) |
| C++ ISO/ANSI | มาตรฐานสากล | ยูนิก , วินโดวส์ (ระบบ 16/32 บิต) | long | 4 [ 14 ] (ข้อกำหนดขั้นต่ำ 4) | −(2 31 ) ถึง (2 31 − 1) | 0 ถึง (2 32 − 1) (ข้อกำหนดขั้นต่ำ) |
| ซี++/ซีแอลไอ | มาตรฐานสากลECMA-372 | ยูนิก , วินโดวส์ (ระบบ 16/32 บิต) | long | 4 [ 15 ] (ข้อกำหนดขั้นต่ำ 4) | −(2 31 ) ถึง (2 31 − 1) | 0 ถึง (2 32 − 1) (ข้อกำหนดขั้นต่ำ) |
| วีบี | มาตรฐานของบริษัท | วินโดวส์ | Long | 4 [ 16 ] | −(2 31 ) ถึง (2 31 − 1) | ไม่มีข้อมูล |
| วีบีเอ | มาตรฐานของบริษัท | วินโดวส์ , แมคโอเอสเอ็กซ์ | Long | 4 [ 17 ] | −(2 31 ) ถึง (2 31 − 1) | ไม่มีข้อมูล |
| เซิร์ฟเวอร์ SQL | มาตรฐานของบริษัท | วินโดวส์ | BigInt | 8 | −(2 63 ) ถึง (2 63 − 1) | 0 ถึง 2 64 |
| C# / VB.NET | มาตรฐานสากล ECMA | ไมโครซอฟต์ .NET | longหรือInt64 | 8 | −(2 63 ) ถึง (2 63 − 1) | 0 ถึง (2 64 − 1) |
| ชวา | มาตรฐานสากล/มาตรฐานของบริษัท | แพลตฟอร์ม Java | long | 8 | −(2 63 ) ถึง (2 63 − 1) | ไม่มีข้อมูล |
| ปาสคาล | ? | วินโดวส์ , ยูนิกซ์ | int64 | 8 | −(2 63 ) ถึง (2 63 − 1) | 0 ถึง 2 64 (ประเภท Qword) |
นานมาก ๆ
ในภาษาการเขียนโปรแกรม Cเวอร์ชันC99และ C++ เวอร์ชันC ++11รองรับชนิดข้อมูลที่มีความจุเป็นสองเท่าของความจุขั้นต่ำของมาตรฐานชนิดข้อมูลนี้ไม่ได้รับการสนับสนุนโดยคอมไพเลอร์ที่ต้องการให้โค้ด C เป็นไปตามมาตรฐาน C++ ก่อนหน้า C++03 เนื่องจาก ชนิด ข้อมูล long longไม่มีอยู่ใน C++03 สำหรับคอมไพเลอร์ที่สอดคล้องกับ ANSI/ISO ข้อกำหนดขั้นต่ำสำหรับช่วงที่ระบุ นั่นคือ−(2 63 − 1) [ 12 ]ถึง2 63 − 1สำหรับจำนวนเต็มบวกและ 0 ถึง2 64 − 1สำหรับจำนวนเต็มลบ[ 13 ]จะต้องเป็นไปตามข้อกำหนด อย่างไรก็ตาม อนุญาตให้ขยายช่วงนี้ได้[ 18 ] [ 19 ] นี่อาจเป็นปัญหาเมื่อแลกเปลี่ยนโค้ดและข้อมูลระหว่างแพลตฟอร์ม หรือเข้าถึงฮาร์ดแวร์โดยตรง ดังนั้นจึงมีชุดส่วนหัวหลายชุดที่ให้ชนิดข้อมูลความกว้างที่แน่นอนซึ่งเป็นอิสระจากแพลตฟอร์ม ไลบรารีมาตรฐาน C ให้<stdint.h> ; ฟังก์ชันนี้ถูกนำมาใช้ใน C99 และ C++11 long longlong
ไวยากรณ์
จำนวนเต็มสามารถเขียนได้ในรูปตัวเลขอาหรับ ทั่วไป ซึ่งประกอบด้วยลำดับของตัวเลข และใช้เครื่องหมายลบนำหน้าค่าเพื่อแสดงการปฏิเสธ อย่างไรก็ตาม ภาษาโปรแกรมส่วนใหญ่ไม่อนุญาตให้ใช้เครื่องหมายจุลภาคหรือช่องว่างในการจัดกลุ่มตัวเลขตัวอย่างของจำนวนเต็ม ได้แก่:
4210000-233000
ในภาษาโปรแกรมหลายภาษา มีวิธีการเขียนตัวเลขจำนวนเต็มหลายวิธี:
- ภาษาโปรแกรมหลายภาษา โดยเฉพาะภาษาที่ได้รับอิทธิพลจากภาษาซี
0Xจะใช้คำนำหน้า " หรือ" นำหน้าตัวเลขจำนวนเต็ม0xเพื่อแสดง ค่า เลขฐานสิบหกเช่น0xDEADBEEF1/2 ภาษาอื่นๆ อาจใช้สัญลักษณ์ที่แตกต่างกัน เช่นภาษาแอสเซมบลีบางภาษาจะเพิ่ม "Hหรือh" ต่อท้ายค่าเลขฐานสิบหก - Perl , Ruby , Java , Julia , D , Go , C# , Rust , Python (ตั้งแต่เวอร์ชัน 3.6 เป็นต้นไป) และPHP (ตั้งแต่เวอร์ชัน 7.4.0 เป็นต้นไป[ 20 ] ) อนุญาตให้ใช้เครื่องหมายขีด ล่างแบบฝัง เพื่อความชัดเจน เช่น และ Fortran
10_000_000รูปแบบคงที่ละเว้นช่องว่างที่ฝังอยู่ในตัวเลขจำนวนเต็ม C (ตั้งแต่C23 เป็นต้นไป ) และ C++ ใช้เครื่องหมายอัญประกาศเดี่ยวเพื่อจุดประสงค์นี้ - ในภาษา CและC++เลขศูนย์นำหน้าแสดงถึงค่าฐานแปด
0755เช่น ซึ่ง เดิมทีตั้งใจให้ใช้กับโหมด Unix เป็นหลัก อย่างไรก็ตาม มีการวิพากษ์วิจารณ์ว่าจำนวนเต็มปกติก็อาจนำหน้าด้วยเลขศูนย์ได้ เช่นกัน [ 21 ]ดังนั้นPython , Ruby , HaskellและOCaml จึง ใส่คำนำหน้าค่าฐานแปดด้วย0Oหรือ0oตามรูปแบบที่ใช้กับค่าฐานสิบหก - ภาษาโปรแกรมหลายภาษา รวมถึงJava , C# , Scala , Python , Ruby , OCaml , C (ตั้งแต่ C23 เป็นต้นไป) และ C++ สามารถแทนค่าเลขฐานสองได้โดยการใส่เครื่องหมาย `-`
0Bหรือ `0b-` นำหน้าตัวเลข
ค่าสุดขั้ว
ในภาษาโปรแกรมหลายภาษา มีค่าคงที่ที่กำหนดไว้ล่วงหน้าซึ่งแสดงถึงค่าต่ำสุดและค่าสูงสุดที่สามารถแทนได้ด้วยชนิดข้อมูลจำนวนเต็มที่กำหนด
ชื่อเรียกสำหรับสิ่งเหล่านี้ได้แก่
- SmallBASIC :
MAXINT[ 22 ] - Java : , [ 23 ]
java.lang.Integer.MAX_VALUEjava.lang.Integer.MIN_VALUE- ในภาษา Java มีฟิลด์ที่สอดคล้องกันสำหรับคลาสจำนวนเต็มอื่นๆ
- C :
INT_MAX,INT_MIN, เป็นต้น[ 24 ] - C++ : , , เป็นต้น[ 26 ]
std::numeric_limits<int>::max()std::numeric_limits<int>::min() - ฮัสเคลล์ :
minBound,maxBound[ 27 ] - ปาสคาล :
MaxInt - Python 2 : [ 28 ]
sys.maxint - Python 3 : [ 29 ]
sys.maxsize - สนิม : , , เป็นต้น[ 30 ]
i32::MAXi32::MIN - ทิวริง :
maxint[ 31 ]
ดูเพิ่มเติม
- เลขคณิตความแม่นยำสูง
- เลขฐานสองแบบเข้ารหัสทศนิยม (BCD)
- ประเภทข้อมูล C
- จำนวนเต็มเกินขีดจำกัด
- การแสดงหมายเลขที่ลงนาม
หมายเหตุ
- ^ไม่ใช่ทุกภาษา SQL ที่มีชนิดข้อมูลแบบไม่มีเครื่องหมาย [ 5 ] [ 6 ]
- ขนาดของchar , short , int , longและlong long ในภาษา C / C ++ ขึ้นอยู่กับการใช้งานของภาษานั้นๆ
- ^ a b c d Fortan ใช้ 'kinds' เพื่อควบคุมขนาดของจำนวนเต็ม ค่าคงที่แบบพารามิเตอร์ที่กำหนด kinds ที่ใช้งานได้นั้นมีอยู่ในโมดูลภายใน iso_fortran_env ค่าคงที่ที่กำหนด kinds ที่เข้ากันได้กับภาษา C นั้นมีอยู่ในโมดูลภายใน iso_c_binding
- ^ภาษา Java ไม่รองรับการคำนวณทางคณิตศาสตร์โดยตรงกับ ชนิด ข้อมูล charผลลัพธ์ที่ได้จะต้องถูกแปลงกลับจากชนิดข้อมูล intเป็น char อีกครั้ง
- ขนาด ของ IntegerและCardinalใน Delphi ไม่แน่นอนและแตกต่างกันไปตามแต่ละแพลตฟอร์ม โดยปกติจะกำหนดเป็น LongIntและLongWordตามลำดับ
- ^ a bสงวนไว้สำหรับการใช้งานในอนาคต ยังไม่ได้นำไปใช้
- ^มาตรฐาน ISO C อนุญาตให้การใช้งานสงวนค่าที่มีบิตเครื่องหมายเป็น 1 และบิตอื่นๆ เป็น 0 (สำหรับการแสดงค่าแบบ sign–magnitude และ two's complement) หรือที่มีบิตทั้งหมดเป็น 1 (สำหรับ one's complement) เพื่อใช้เป็นค่า "trap" ซึ่งใช้เพื่อระบุ (ตัวอย่างเช่น) การโอเวอร์โฟลว์ [ 12 ]
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ จำนวนเต็ม (วิทยาการคอมพิวเตอร์)
ในวิทยาการคอมพิวเตอร์จำนวนเต็มคือข้อมูลประเภทจำนวนเต็มซึ่ง เป็น ประเภทข้อมูลที่แสดงช่วงของจำนวนเต็ม ทาง...
คุณค่าและการเป็นตัวแทน
ค่าของรายการที่มีประเภทจำนวนเต็มคือจำนวนเต็มทางคณิตศาสตร์ที่สอดคล้องกับรายการนั้น ประเภทจำนวนเต็มอาจเป็น แบบ ไม่มีเครื่องหมาย (สามารถแสดงเฉพาะจำนวนเต็มที่ไม่เป็นลบ) หรือ แบบมีเครื่องหมาย (สามารถแสดงจำนวนเต็มลบได้เช่นกัน) [ 2 ]
ไบต์และอ็อกเท็ต
เดิมที คำว่า ไบต์ หมายถึง 'หน่วยความจำที่เล็กที่สุดที่สามารถเข้าถึงได้' ในอดีตมีการใช้ไบต์ขนาด 5, 6, 7, 8 และ 9 บิต นอกจากนี้ยังมีคอมพิวเตอร์ที่สามารถเข้าถึงบิตแต่ละบิตได้ ('เครื่องที่เข้าถึงด้วยบิต') หรือที่สามารถเข้าถึงเฉพาะปริมาณ 16 หรือ 32 บิตเท่านั้น...
คำ
คำว่า 'word' ใช้สำหรับกลุ่มบิตขนาดเล็กที่ได้รับการประมวลผลพร้อมกันโดยโปรเซสเซอร์ที่มี สถาปัตยกรรม เฉพาะ ขนาดของ word จึงขึ้นอยู่กับ CPU แต่ละรุ่น มีการใช้ขนาด word ที่แตกต่างกันมากมาย รวมถึง 6, 8, 12, 16, 18, 24, 32, 36, 39, 40, 48, 60 และ 64 บิต...