【发布时间】:2013-05-18 08:47:16
【问题描述】:
我只想使用NOT ( ~ ) 运算符反转整数的二进制值,但是当我这样做时
struct rev
{
unsigned i:3; //for only 3 bits means 000 to 111
};
r.i = 5;
printf(" Reverse of %d = %u \n",r.i,~(r.i));
它给了我Reverse of 5 = 4294967290
但我想要Reverse of 5 = 2,因为我使用的是 3 位,所以如果我不这样做,那么 5 将更改为 2,但它没有像这样显示,它给我的结果是 fffffffa 我不知道为什么.
意味着我想要的是仅通过 NOT 运算符交换 1 和 0。 我想要
0 - 7
1 - 6
2 - 5
...像这样。
谢谢。
【问题讨论】:
-
C 中没有 unsigned:3 类型,所以 ~r.i 不会只反转 3 位。
-
那么如何只反转3位??
-
syam 和 Matt 都已经给你答案了。您不仅可以反转 3 位,还可以通过屏蔽或截断获得等价的。
-
请意识到,c/c++ 的代码被编译成汇编并由处理器执行。没有什么比 3bit 操作...