任何精通低级代码优化的人都知道分支的危险,无论将其实现为if语句,循环还是select语句,分支错误预测的可能性都是一件很浪费时钟的事情。
使用简单的算法可以更好地解决简单的问题,所以让我们这样做。
对于以下问题,所有变量都是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位操作员的分数。
一个解决方案可以包含作者认为合适的变量。
未设置的变量具有value 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]
吗?
-
但~
可能会很好(即使我不知道该做什么)。