การเขียนโปรแกรม D - ตัวดำเนินการ
ตัวดำเนินการคือสัญลักษณ์ที่บอกให้คอมไพเลอร์ดำเนินการทางคณิตศาสตร์หรือตรรกะเฉพาะ ภาษา D อุดมไปด้วยตัวดำเนินการในตัวและมีตัวดำเนินการประเภทต่อไปนี้ -
- ตัวดำเนินการเลขคณิต
- ตัวดำเนินการเชิงสัมพันธ์
- ตัวดำเนินการทางตรรกะ
- ตัวดำเนินการ Bitwise
- ผู้ดำเนินการมอบหมาย
- ตัวดำเนินการอื่น ๆ
บทนี้จะอธิบายเกี่ยวกับเลขคณิตเชิงสัมพันธ์ตรรกะบิตการกำหนดและตัวดำเนินการอื่น ๆ ทีละตัว
ตัวดำเนินการเลขคณิต
ตารางต่อไปนี้แสดงตัวดำเนินการเลขคณิตทั้งหมดที่ภาษา D รองรับ สมมติตัวแปรA ถือ 10 และตัวแปร B ถือ 20 แล้ว -
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
+ | จะเพิ่มตัวถูกดำเนินการสองตัว | A + B ให้ 30 |
- | มันจะลบตัวถูกดำเนินการที่สองจากตัวแรก | A - B ให้ -10 |
* | มันคูณตัวถูกดำเนินการทั้งสอง | A * B ให้ 200 |
/ | มันหารตัวเศษด้วยตัวหาร | B / A ให้ 2 |
% | ส่งคืนส่วนที่เหลือของการหารจำนวนเต็ม | B% A ให้ 0 |
++ | ตัวดำเนินการส่วนเพิ่มจะเพิ่มค่าจำนวนเต็มทีละหนึ่ง | A ++ ให้ 11 |
- | ตัวดำเนินการลดลงจะลดค่าจำนวนเต็มทีละหนึ่ง | A - ให้ 9 |
ตัวดำเนินการเชิงสัมพันธ์
ตารางต่อไปนี้แสดงตัวดำเนินการเชิงสัมพันธ์ทั้งหมดที่สนับสนุนโดยภาษา D สมมติตัวแปรA ถือ 10 และตัวแปร B ถือ 20 แล้ว -
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
== | ตรวจสอบว่าค่าของตัวถูกดำเนินการสองค่าเท่ากันหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง | (A == B) ไม่เป็นความจริง |
! = | ตรวจสอบว่าค่าของตัวถูกดำเนินการสองค่าเท่ากันหรือไม่หากค่าไม่เท่ากันเงื่อนไขจะกลายเป็นจริง | (A! = B) เป็นจริง |
> | ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายมากกว่าค่าของตัวถูกดำเนินการด้านขวาหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง | (A> B) ไม่เป็นความจริง |
< | ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายน้อยกว่าค่าของตัวถูกดำเนินการด้านขวาหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง | (A <B) เป็นจริง |
> = | ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายมากกว่าหรือเท่ากับค่าของตัวถูกดำเนินการด้านขวาหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง | (A> = B) ไม่เป็นความจริง |
<= | ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายน้อยกว่าหรือเท่ากับค่าของตัวถูกดำเนินการด้านขวาหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง | (A <= B) เป็นจริง |
ตัวดำเนินการทางตรรกะ
ตารางต่อไปนี้แสดงตัวดำเนินการทางตรรกะทั้งหมดที่ภาษา D รองรับ สมมติตัวแปรA ถือ 1 และตัวแปร B ถือ 0 แล้ว -
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
&& | เรียกว่า Logical AND operator ถ้าตัวถูกดำเนินการทั้งสองไม่ใช่ศูนย์เงื่อนไขจะกลายเป็นจริง | (A && B) เป็นเท็จ |
|| | เรียกว่า Logical OR Operator หากตัวถูกดำเนินการสองตัวใดตัวหนึ่งไม่ใช่ศูนย์เงื่อนไขจะกลายเป็นจริง | (A || B) เป็นจริง |
! | เรียกว่า Logical NOT Operator ใช้เพื่อย้อนกลับสถานะตรรกะของตัวถูกดำเนินการ หากเงื่อนไขเป็นจริงตัวดำเนินการ Logical NOT จะสร้างเท็จ | ! (A && B) เป็นเรื่องจริง |
ตัวดำเนินการ Bitwise
ตัวดำเนินการ Bitwise ทำงานบนบิตและดำเนินการแบบบิตต่อบิต ตารางความจริงสำหรับ &, | และ ^ มีดังนี้ -
น | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
สมมติว่า A = 60; และ B = 13 ในรูปแบบไบนารีจะเป็นดังนี้ -
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
ก | B = 0011 1101
ก ^ B = 0011 0001
~ A = 1100 0011
ตัวดำเนินการ Bitwise ที่รองรับโดยภาษา D แสดงอยู่ในตารางต่อไปนี้ สมมติตัวแปร A ถือ 60 และตัวแปร B ถือ 13 จากนั้น -
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
& | ไบนารี AND Operator จะคัดลอกบิตไปยังผลลัพธ์หากมีอยู่ในตัวถูกดำเนินการทั้งสอง | (A & B) จะให้ 12 หมายถึง 0000 1100 |
| | ไบนารีหรือตัวดำเนินการจะคัดลอกบิตหากมีอยู่ในตัวถูกดำเนินการอย่างใดอย่างหนึ่ง | (A | B) ให้ 61. หมายถึง 0011 1101 |
^ | ตัวดำเนินการ XOR ไบนารีจะคัดลอกบิตหากตั้งค่าไว้ในตัวถูกดำเนินการเดียว แต่ไม่ใช่ทั้งสองอย่าง | (A ^ B) ให้ 49. หมายถึง 0011 0001 |
~ | Binary Ones Complement Operator เป็นเอกภาพและมีผลของบิต 'พลิก' | (~ A) ให้ -61 หมายถึง 1100 0011 ในแบบฟอร์มส่วนเสริม 2 |
<< | ตัวดำเนินการกะซ้ายแบบไบนารี ค่าตัวถูกดำเนินการด้านซ้ายจะถูกย้ายไปทางซ้ายตามจำนวนบิตที่ระบุโดยตัวถูกดำเนินการด้านขวา | A << 2 ให้ 240 หมายถึง 1111 0000 |
>> | ตัวดำเนินการกะไบนารีขวา ค่าตัวถูกดำเนินการด้านซ้ายจะถูกย้ายไปทางขวาตามจำนวนบิตที่ระบุโดยตัวถูกดำเนินการด้านขวา | ก >> 2 ให้ 15 หมายถึง 0000 1111. |
ผู้ดำเนินการมอบหมาย
ตัวดำเนินการกำหนดต่อไปนี้รองรับภาษา D -
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
= | มันเป็นตัวดำเนินการกำหนดง่าย กำหนดค่าจากตัวถูกดำเนินการด้านขวาไปยังตัวถูกดำเนินการด้านซ้าย | C = A + B กำหนดค่า A + B เป็น C |
+ = | เป็นตัวดำเนินการเพิ่มและกำหนด เพิ่มตัวถูกดำเนินการด้านขวาให้กับตัวถูกดำเนินการด้านซ้ายและกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการด้านซ้าย | C + = A เทียบเท่ากับ C = C + A |
- = | เป็นตัวดำเนินการลบและกำหนด มันจะลบตัวถูกดำเนินการด้านขวาออกจากตัวถูกดำเนินการด้านซ้ายและกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการด้านซ้าย | C - = A เทียบเท่ากับ C = C - A |
* = | เป็นตัวดำเนินการคูณและกำหนด มันจะคูณตัวถูกดำเนินการด้านขวากับตัวถูกดำเนินการด้านซ้ายและกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการด้านซ้าย | C * = A เทียบเท่ากับ C = C * A |
/ = | เป็นตัวดำเนินการแบ่งและกำหนด มันแบ่งตัวถูกดำเนินการด้านซ้ายกับตัวถูกดำเนินการด้านขวาและกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการด้านซ้าย | C / = A เทียบเท่ากับ C = C / A |
% = | มันคือโมดูลัสและตัวดำเนินการกำหนด ใช้โมดูลัสโดยใช้ตัวถูกดำเนินการสองตัวและกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการด้านซ้าย | C% = A เทียบเท่ากับ C = C% A |
<< = | เป็นตัวดำเนินการเลื่อนซ้ายและตัวดำเนินการกำหนด | C << = 2 เหมือนกับ C = C << 2 |
>> = | เป็นตัวดำเนินการกะและกำหนดสิทธิ์ | C >> = 2 เหมือนกับ C = C >> 2 |
& = | เป็นตัวดำเนินการกำหนดค่าบิตและ | C & = 2 เหมือนกับ C = C & 2 |
^ = | เป็นบิตพิเศษ OR และตัวดำเนินการกำหนด | C ^ = 2 เหมือนกับ C = C ^ 2 |
| = | เป็นบิตรวมหรือและตัวดำเนินการกำหนด | C | = 2 เหมือนกับ C = C | 2 |
ผู้ปฏิบัติงานที่ผิดพลาด - Sizeof และ Ternary
มีตัวดำเนินการที่สำคัญอื่น ๆ รวมถึง sizeof และ ? : รองรับโดย D Language
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
ขนาดของ() | ส่งคืนขนาดของตัวแปร | sizeof (a) โดยที่ a เป็นจำนวนเต็มจะส่งกลับ 4 |
& | ส่งกลับที่อยู่ของตัวแปร | & a; ให้ที่อยู่จริงของตัวแปร |
* | ชี้ไปที่ตัวแปร | * ก; ให้ตัวชี้ไปยังตัวแปร |
เหรอ? : | นิพจน์เงื่อนไข | ถ้าเงื่อนไขเป็นจริงค่า X: มิฉะนั้นค่า Y |
ลำดับความสำคัญของตัวดำเนินการใน D
ลำดับความสำคัญของตัวดำเนินการกำหนดการจัดกลุ่มคำศัพท์ในนิพจน์ สิ่งนี้มีผลต่อวิธีการประเมินนิพจน์ ตัวดำเนินการบางอย่างมีความสำคัญเหนือกว่าผู้อื่น
ตัวอย่างเช่นตัวดำเนินการคูณมีลำดับความสำคัญสูงกว่าตัวดำเนินการบวก
ให้เราพิจารณานิพจน์
x = 7 + 3 * 2
ที่นี่ x ถูกกำหนด 13 ไม่ใช่ 20 เหตุผลง่ายๆคือตัวดำเนินการ * มีลำดับความสำคัญสูงกว่า + ดังนั้นจึงคำนวณ 3 * 2 ก่อนจากนั้นจึงเพิ่มผลลัพธ์เป็น 7
ที่นี่ตัวดำเนินการที่มีลำดับความสำคัญสูงสุดจะปรากฏที่ด้านบนสุดของตารางตัวดำเนินการที่มีค่าต่ำสุดจะปรากฏที่ด้านล่าง ภายในนิพจน์ตัวดำเนินการที่มีลำดับความสำคัญสูงกว่าจะได้รับการประเมินก่อน
แสดงตัวอย่าง
ประเภท | ตัวดำเนินการ | ความสัมพันธ์ |
---|---|---|
Postfix | () [] ->. ++ - - | จากซ้ายไปขวา |
ยูนารี | + -! ~ ++ - - (type) * & sizeof | จากขวาไปซ้าย |
หลายหลาก | * /% | จากซ้ายไปขวา |
สารเติมแต่ง | + - | จากซ้ายไปขวา |
กะ | << >> | จากซ้ายไปขวา |
เชิงสัมพันธ์ | <<=>> = | จากซ้ายไปขวา |
ความเท่าเทียมกัน | ==! = | จากซ้ายไปขวา |
Bitwise AND | & | จากซ้ายไปขวา |
Bitwise XOR | ^ | จากซ้ายไปขวา |
Bitwise หรือ | | | จากซ้ายไปขวา |
ตรรกะ AND | && | จากซ้ายไปขวา |
ตรรกะหรือ | || | จากซ้ายไปขวา |
เงื่อนไข | ?: | จากขวาไปซ้าย |
การมอบหมายงาน | = + = - = * = / =% = >> = << = & = ^ = | = | จากขวาไปซ้าย |
จุลภาค | , | จากซ้ายไปขวา |