char中的镜像位,有限运算符+,<<,&没有循环允许,C语言

时间:2012-02-04 01:43:19

标签: char bitwise-operators bits mirror

准备考试并陷入这个问题: 允许的运算符允许<<,+,& 无循环最小临时变量。 在C中写一个函数,它获得4位数(char)并返回镜像(相对于中心)位。 示例:给定b4,b3,b2,b1返回b1,b2,b3,b4

O_o谢谢!

可能不太清楚,但允许使用通用语言工具('==',if,&gt;,&lt; etc ..)

1 个答案:

答案 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);
}