ใครก็ตามที่อยู่ในระดับปานกลางถึงการเพิ่มประสิทธิภาพโค้ดระดับต่ำรู้เกี่ยวกับภัยของการแตกแขนงไม่ว่าจะเป็นการใช้คำสั่งลูปหรือคำสั่งที่เลือกความเป็นไปได้ของการคาดคะเนสาขาเป็นสิ่งที่น่ากลัวมาก
ปัญหาง่าย ๆ สามารถแก้ไขได้ดีกว่าด้วยการคำนวณทางคณิตศาสตร์อย่างง่ายลองทำกันเถอะ
สำหรับปัญหาต่อไปนี้ตัวแปรทั้งหมดเป็นจำนวนเต็ม 32 บิตที่ไม่ได้ลงชื่อและรหัสที่อนุญาตเท่านั้นคือชุดคำสั่งธรรมดาที่เกี่ยวข้องกับตัวดำเนินการต่อไปนี้เท่านั้น:
+ addition
- subtraction
* multiplication
/ integer division, rounds down, division by 0 not allowed
% modulo
& binary and
| binary or
^ binary exclusive or
>> bitshift right
<< bitshift left
Logic operators, return 1 if the expression is true and 0 if it is false.
== equal
!= not equal
< less than
<= less than or equal
> greater than
>= greater than or equal
Set operator
=
ทุกบรรทัดต้องประกอบด้วยตัวระบุตัวแปรตามด้วยตัวดำเนินการชุดตามด้วยนิพจน์
นิพจน์อาจไม่มีตัวดำเนินการชุดเพิ่มเติม แต่อาจประกอบด้วยตัวระบุตัวแปรตัวเลขตัวอักษรและวงเล็บ
คะแนนกอล์ฟจะนับจำนวนผู้ประกอบการเท่านั้น
ตัวอย่าง:
myvar = ( ( ( foo + 5 ) * bar ) % 7 ) == 3
มีคะแนน 5 ผู้ประกอบการ
คำตอบอาจรวมถึงตัวแปรหลายตัวตามที่ผู้เขียนเห็นว่าเหมาะสม ตัวแปรที่ยังไม่ได้รับการตั้งค่ามีค่า
อนุญาตให้มีมากเกินไปและอันเดอร์โฟลว์ได้ลบจำนวนอันเดอร์โฟลว์ลบทั้งหมดคือ0
3 - 5
4294967294
แม้จะเป็นส่วนหนึ่งของคำสั่งที่มีขนาดใหญ่
ภารกิจที่ 1: สูงสุด
สองค่าA
และB
มีอยู่ในขอบเขตทำให้RESULT
ตัวแปรมีค่ามากที่สุดเมื่อโปรแกรมสิ้นสุด
ภารกิจที่ 2: ค่ามัธยฐาน
สามค่าA
, B
และC
, อยู่ในขอบเขตที่ทำให้RESULT
ตัวแปรมีค่ามัธยฐานของค่าเหล่านั้นเมื่อสิ้นสุดโปรแกรม
ภารกิจที่ 3: รากที่สอง
หนึ่งค่าA
มีอยู่ในขอบเขตทำให้RESULT
ตัวแปรมีสแควร์รูทของA
ถูกปัดเศษลงเมื่อโปรแกรมยกเลิก
การโพสต์คำตอบสำหรับคำถามเพียงหนึ่งหรือสองคำถามกับบางคนที่เพิ่งพบว่าการแก้ปัญหาที่ถูกต้องจะเป็นเรื่องที่ท้าทาย
0xFFFF_FFFF_FFFF_FFFF ^ x
0 - x
ฉันจะลืมได้อย่างไร
!
x == 0
Boole[a-b]
หรือไม่
-
แต่~
อาจจะดี (แม้ว่าฉันจะไม่รู้)