我需要反转一个数字中的所有位,假设2(10二进制)反转后它将等于01. 但是我遇到了一个问题,即按位求反操作也会反转符号位,通常情况下,数字在内存中表示的所有位。事实证明:
int a = ~2; // -3
我怎么还能得到1,不是-3吗?
我需要反转一个数字中的所有位,假设2(10二进制)反转后它将等于01. 但是我遇到了一个问题,即按位求反操作也会反转符号位,通常情况下,数字在内存中表示的所有位。事实证明:
int a = ~2; // -3
我怎么还能得到1,不是-3吗?
实际上,位运算不应该应用于有符号整数,所以我直接写 for
unsigned。唉,你的任务还不清楚。您似乎只想反转位,从最重要的一位开始?
所以?
在这里,对于 0,我们仍然将其反转为 1。
但我不确定你想要什么 7 或者 3 被反转为 0 - 它们都是 1。
一般来说,您需要一个非常准确的技术规范,否则结果将是 HZ ...
对于@avp,同样成功:
实际上,您需要反转表示二进制数字的位数。(7 dex - 111 bin,有 3 位数字。8 dex - 1000 bin,有 4 位数字)
对于这样的 uint32:
对于其他尺寸,您需要更改班次数。
完整代码:https ://ideone.com/02KvkC ;反转结果:
如果你想在 C++ 中使用位表示,有一个特殊的类
std::bitset。这是您的案例的一个小用例:该功能
flip允许您反转所有位以及特定位。另外的选择