-1

准备考试并被困在这个问题上: 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..)

4

1 回答 1

2

这是不可能的,因为只有运算符的约束,<<, +, &除了 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);
}
于 2012-02-04T01:59:18.853 回答