准备考试并陷入这个问题:
允许的运算符允许<<,+,&
无循环,最小临时变量。
在C中写一个函数,它获得4位数(char)并返回镜像(相对于中心)位。
示例:给定b4,b3,b2,b1
返回b1,b2,b3,b4
O_o谢谢!
可能不太清楚,但允许使用通用语言工具('==',if,&gt;,&lt; etc ..)
答案 0 :(得分:2)
这不可能只考虑运算符<<, +, &
的约束,除了返回之外没有其他构造。
要将b3从第3个位置移动到第2个位置,您需要一种向右移动的方法,这需要类似&gt;&gt;的内容。要么 /。在提供的运算符中,没有一个可以与b3一起使用来设置第2位或第1位。
如果可以使用if语句和赋值运算符=
,则可以。然后你可以编写一个凌乱的解决方案,如
char flip(char c)
{
char f;
f = (c & 1) << 3 + (c & 2) << 1;
if (c & 4)
f = f + 2;
if (c & 8)
f = f + 1;
return f;
}
如果您可以使用与if
?
运算符类似的内容,则会使用更难看但更短的内容。
char flip(char c)
{
return (c & 1) << 3 + (c & 2) << 1 + ((c & 4) ? 2 : 0) + ((c & 8) ? 1 : 0);
}