准备考试并被困在这个问题上: Allowed Operators are <<,+,&
no loops allowed and minimum temp variables。用 C 语言编写一个函数,该函数获取 4 位数字 (char) 并返回镜像(相对于中心)位。示例:给定b4,b3,b2,b1
返回b1,b2,b3,b4
O_o 谢谢!
可能不清楚,但允许使用通用语言工具('==',if,>,< etc..)
准备考试并被困在这个问题上: Allowed Operators are <<,+,&
no loops allowed and minimum temp variables。用 C 语言编写一个函数,该函数获取 4 位数字 (char) 并返回镜像(相对于中心)位。示例:给定b4,b3,b2,b1
返回b1,b2,b3,b4
O_o 谢谢!
可能不清楚,但允许使用通用语言工具('==',if,>,< etc..)
这是不可能的,因为只有运算符的约束,<<, +, &
除了 return 之外没有其他构造。
要将 b3 从第三个位置移动到第二个位置,您需要一种向右移动的方法,这需要像 >> 或 / 之类的东西。在提供的运算符中,没有一个可以与 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);
}