อ่าน 3 นาที
ค่าคงที่จำนวนเต็ม
ในวิทยาการคอมพิวเตอร์ตัวเลขจำนวนเต็ม (integer literal) คือ ตัวเลขชนิดหนึ่งที่ใช้แทนจำนวนเต็ม ซึ่ง ค่าของมันถูกแสดงโดยตรงในโค้ดตัวอย่างเช่น ในคำสั่งกำหนดค่า สตริงx = 1`int`...
ค่าคงที่จำนวนเต็ม
ในวิทยาการคอมพิวเตอร์ตัวเลขจำนวนเต็ม (integer literal) คือ ตัวเลขชนิดหนึ่งที่ใช้แทนจำนวนเต็ม ซึ่ง ค่าของมันถูกแสดงโดยตรงในโค้ดตัวอย่างเช่น ในคำสั่งกำหนดค่า สตริงx = 1`int` 1คือตัวเลขจำนวนเต็มที่แสดงค่า 1 ในขณะที่ในคำสั่ง `int` สตริงx = 0x10`int` 0x10คือตัวเลขจำนวนเต็มที่แสดงค่า 16 ซึ่งแสดงด้วย10`int` ในเลขฐานสิบหก (ระบุโดย0xคำนำหน้า `int`)
ในทางตรงกันข้าม ในx = cos(0)นิพจน์cos(0)จะประเมินค่าเป็น 1 (เนื่องจากเป็นโคไซน์ของ 0) แต่ค่า 1 นั้นไม่ได้ถูกรวมอยู่ในซอร์สโค้ดอย่างแท้จริงx = 2 + 2, กล่าวอย่างง่ายๆ ใน นิพจน์2 + 2จะประเมินค่าเป็น 4 แต่ค่า 4 นั้นไม่ได้ถูกรวมอยู่ในซอร์สโค้ดอย่างแท้จริง ยิ่งไปกว่านั้น ในx = "1"เป็น"1"สตริงลิเทอรัลไม่ใช่จำนวนเต็มลิเทอรัล เพราะอยู่ในเครื่องหมายคำพูด ค่าของสตริงคือ1ซึ่งบังเอิญเป็นสตริงจำนวนเต็ม แต่เป็นการวิเคราะห์ความหมายของสตริงลิเทอรัล – ในระดับไวยากรณ์"1"เป็นเพียงสตริง ไม่แตกต่าง"foo"จาก
การแยกวิเคราะห์
การระบุสตริง (ลำดับของอักขระในซอร์สโค้ด) ว่าเป็นค่าจำนวนเต็มเป็นส่วนหนึ่งของ ขั้นตอน การวิเคราะห์ทางศัพท์ (lexing) ในขณะที่การประเมินค่าของค่าจำนวนเต็มนั้นเป็นส่วนหนึ่งของ ขั้นตอน การวิเคราะห์ทางความหมายภายในตัวแยกคำและไวยากรณ์วลี คลาสของโทเค็นมักจะแสดงด้วยintegerโดยตัวพิมพ์เล็กบ่งบอกถึงคลาสของโทเค็นระดับศัพท์ ซึ่งแตกต่างจากกฎการสร้างระดับวลี (เช่นListOfIntegers) เมื่อสตริงถูกแยกคำ (โทเค็น) เป็นค่าจำนวนเต็มแล้ว ค่าของมันจะไม่สามารถกำหนดได้ทางไวยากรณ์ (มันเป็นเพียงจำนวนเต็ม) และการประเมินค่าของมันจึงกลายเป็นคำถามทางความหมาย
โดยทั่วไปแล้ว ตัวอักษรจำนวนเต็มจะถูกแยกวิเคราะห์ด้วยนิพจน์ปกติเช่นเดียวกับในPython [ 1 ]
การประเมิน
เช่นเดียวกับค่าคงที่อื่นๆ ค่าคงที่จำนวนเต็มโดยทั่วไปจะถูกประเมินในขั้นตอนการคอมไพล์ ซึ่งเป็นส่วนหนึ่งของขั้นตอนการวิเคราะห์ความหมาย ในบางกรณี การวิเคราะห์ความหมายนี้จะทำในตัวแยกวิเคราะห์คำ (lexer) ทันทีที่ตรวจพบค่าคงที่จำนวนเต็ม ในขณะที่ในบางกรณี การวิเคราะห์ความหมายจะถูกเลื่อนไปจนถึงขั้นตอนการแยกวิเคราะห์ หรือจนกว่า โครงสร้าง ต้นไม้การแยกวิเคราะห์จะถูกสร้างขึ้นอย่างสมบูรณ์ ตัวอย่างเช่น เมื่อตรวจพบสตริง ตัว0x10แยกวิเคราะห์คำอาจประเมินค่าเป็น 16 ทันทีและจัดเก็บค่าดังกล่าว (โทเค็นที่มีประเภทintegerและค่า 16) หรืออาจเลื่อนการประเมินออกไปและบันทึกโทเค็นที่มีประเภทintegerและค่า0x10แทน
เมื่อค่าคงที่ได้รับการประเมินแล้ว การวิเคราะห์ความหมายเพิ่มเติมในรูปแบบของการพับค่าคงที่ก็เป็นไปได้ ซึ่งหมายความว่านิพจน์ค่าคงที่ที่เกี่ยวข้องกับค่าคงที่สามารถประเมินได้ในขั้นตอนการคอมไพล์ ตัวอย่างเช่น ในคำสั่งx = 2 + 2หลังจากที่ค่าคงที่ได้รับการประเมินและนิพจน์2 + 2ได้รับการแยกวิเคราะห์แล้ว นิพจน์นั้นสามารถประเมินได้เป็น 4 แม้ว่าค่า 4 นั้นจะไม่ปรากฏเป็นค่าคงที่ก็ตาม
คำต่อท้าย
ตัวอักษรจำนวนเต็มมักจะมีคำนำหน้าเพื่อระบุฐาน และไม่ค่อยมีคำต่อท้ายเพื่อระบุประเภท[ 1 ]ตัวอย่างเช่น ในC++0x10ULLระบุค่า 16 (เนื่องจากเป็นเลขฐานสิบหก) เป็นจำนวนเต็มแบบยาวที่ไม่มีเครื่องหมาย
คำนำหน้าคำที่พบบ่อย ได้แก่:
0xหรือ0Xสำหรับเลขฐานสิบหก (ฐาน 16)0*0oหรือ0O* สำหรับเลขฐานแปด (ฐาน 8) *: เพิ่มในC2Y0bหรือ0Bสำหรับเลขฐานสอง (ฐาน 2) เพิ่มเข้ามาในC23และC++ 14
คำต่อท้ายที่พบบ่อย ได้แก่:
lหรือLสำหรับจำนวนเต็มขนาดใหญ่llหรือLLสำหรับจำนวนเต็มขนาดใหญ่มากuหรือUสำหรับจำนวนเต็มที่ไม่ติดลบ
คำต่อท้ายเหล่านี้ค่อนข้างคล้ายกับสัญลักษณ์แต่สัญลักษณ์จะใช้กับตัวระบุ (ชื่อ) ไม่ใช่คำที่มีความหมายตรงตัว
ตัวคั่นตัวเลข
ในบางภาษา ตัวเลขจำนวนเต็มอาจมีตัวคั่นหลักเพื่อช่วยจัดกลุ่มหลักให้อ่านง่ายขึ้น หากสามารถทำได้กับตัวเลขทศนิยมด้วยเช่นกัน วิธีนี้มีประโยชน์อย่างยิ่งสำหรับฟิลด์บิตและทำให้มองเห็นขนาดของตัวเลขขนาดใหญ่ (เช่น หนึ่งล้าน) ได้ง่ายขึ้นในทันทีโดย การนับจำนวนหลักโดย ไม่ต้องนับจำนวนหลัก นอกจากนี้ยังเป็นประโยชน์สำหรับตัวเลขที่มักจะจัดกลุ่ม เช่นหมายเลขบัตรเครดิตหรือหมายเลขประกันสังคม[ a ]ตัวเลขที่ยาวมากสามารถจัดกลุ่มเพิ่มเติมได้โดยการใช้ตัวคั่นซ้ำกัน
โดยทั่วไปแล้ว เลขฐานสิบ (ฐาน 10) จะถูกจัดกลุ่มเป็นกลุ่มละสามหลัก (แทนค่าที่เป็นไปได้ 1 ใน 1000 ค่า) เลขฐานสอง (ฐาน 2) จะถูกจัดกลุ่มเป็นกลุ่มละสี่หลัก (หนึ่งนิบเบิลแทนค่าที่เป็นไปได้ 1 ใน 16 ค่า) และเลขฐานสิบหก (ฐาน 16) จะถูกจัดกลุ่มเป็นกลุ่มละสองหลัก (แต่ละหลักคือหนึ่งนิบเบิล ดังนั้นสองหลักจึงเท่ากับหนึ่งไบต์แทนค่าที่เป็นไปได้ 1 ใน 256 ค่า) ส่วนเลขจากระบบอื่นๆ (เช่น เลขประจำตัว) จะถูกจัดกลุ่มตามหลักเกณฑ์ที่ใช้กันอยู่
ตัวอย่าง
ในAda [ 2 ] [ 3 ] C# ( ตั้งแต่เวอร์ชัน 7.0), D , Eiffel , Go (ตั้งแต่เวอร์ชัน 1.13), [ 4 ] Haskell (ตั้งแต่ GHC เวอร์ชัน 8.6.1), [ 5 ] Java (ตั้งแต่เวอร์ชัน 7), [ 6 ] Julia , Perl , Python (ตั้งแต่เวอร์ชัน 3.6), [ 7 ] Ruby , Rust [ 8 ]และSwift [ 9 ]ตัวเลขจำนวนเต็มและตัวเลขทศนิยมสามารถคั่นด้วยเครื่องหมายขีด ล่าง ( _) ได้ อาจมีข้อจำกัดบางประการเกี่ยวกับการวางตำแหน่ง ตัวอย่างเช่น ใน Java เครื่องหมายขีด ล่างไม่สามารถปรากฏที่ต้นหรือท้ายของตัวเลข หรือถัดจากจุดทศนิยมได้ ในขณะที่จุด จุลภาค และช่องว่าง (บางๆ) ถูกใช้ในการเขียนปกติเพื่อคั่นตัวเลข แต่สิ่งเหล่านี้ขัดแย้งกับการใช้งานที่มีอยู่แล้วในภาษาโปรแกรมในฐานะจุดฐาน ตัวคั่นรายการ (และใน C/C++ ตัวดำเนินการจุลภาค ) และตัวคั่นโทเค็น _
ตัวอย่างเช่น:
int oneMillion = 1_000_000 ; int creditCardNumber = 1234_5678_9012_3456 ; int socialSecurityNumber = 123_45_6789 ;ในC++14 (2014) และเวอร์ชันถัดไปของCตั้งแต่ปี 2022 คือC23อักขระอะพอสโทรฟีสามารถใช้เพื่อแยกตัวเลขตามอำเภอใจในตัวเลขได้[ 10 ] [ 11 ]เดิมทีมีการเสนอให้ใช้เครื่องหมายขีดล่าง โดยมีการเสนอครั้งแรกในปี 1993 [ 12 ]และอีกครั้งสำหรับC++11 [ 13 ] ตามภาษาอื่นๆ อย่างไรก็ตาม การใช้เครื่องหมายขีดล่างทำให้เกิดความขัดแย้งกับตัวเลขที่ผู้ใช้กำหนดดังนั้นจึงมีการเสนอให้ใช้อะพอสโทรฟีแทนในฐานะ " จุลภาคบน " (ซึ่งใช้ในบริบทอื่นๆ บางบริบท) [ 14 ] [ 15 ]
auto integer_literal = 1'000'000 ; auto binary_literal = 0b0100'1100'0110 ; auto very_long_binary_literal = 0b0000'0001'0010'0011 '' 0100'0101'0110'0111 ;หมายเหตุ
- ^โดยปกติแล้ว ตัวเลขที่มีความละเอียดอ่อนเช่นนี้ จะไม่ถูกรวมเป็นค่าคงที่
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ค่าคงที่จำนวนเต็ม
ในวิทยาการคอมพิวเตอร์ตัวเลขจำนวนเต็ม (integer literal) คือ ตัวเลขชนิดหนึ่งที่ใช้แทนจำนวนเต็ม ซึ่ง ค่าของมันถูกแสดงโดยตรงในโค้ดตัวอย่างเช่น ในคำสั่งกำหนดค่า สตริงx = 1`int`...
การแยกวิเคราะห์
การระบุสตริง (ลำดับของอักขระในซอร์สโค้ด) ว่าเป็นค่าจำนวนเต็มเป็นส่วนหนึ่งของ ขั้นตอน การวิเคราะห์ทางศัพท์ (lexing) ในขณะที่การประเมินค่าของค่าจำนวนเต็มนั้นเป็นส่วนหนึ่งของ ขั้นตอน การวิเคราะห์ทางความหมาย ภายในตัวแยกคำและไวยากรณ์วลี คลาสของโทเค็นมักจะแสดงด้วย...
การประเมิน
เช่นเดียวกับค่าคงที่อื่นๆ ค่าคงที่จำนวนเต็มโดยทั่วไปจะถูกประเมินในขั้นตอนการคอมไพล์ ซึ่งเป็นส่วนหนึ่งของขั้นตอนการวิเคราะห์ความหมาย ในบางกรณี การวิเคราะห์ความหมายนี้จะทำในตัวแยกวิเคราะห์คำ (lexer) ทันทีที่ตรวจพบค่าคงที่จำนวนเต็ม ในขณะที่ในบางกรณี...
คำต่อท้าย
ตัวอักษรจำนวนเต็มมักจะมีคำนำหน้าเพื่อระบุฐาน และไม่ค่อยมีคำต่อท้ายเพื่อระบุประเภท [ 1 ] ตัวอย่างเช่น ใน C++ 0x10ULL ระบุค่า 16 (เนื่องจากเป็นเลขฐานสิบหก) เป็นจำนวนเต็มแบบยาวที่ไม่มีเครื่องหมาย