【发布时间】:2026-01-01 10:55:02
【问题描述】:
我只是想在 C++ 中使用 ~ 运算符进行按位补码:
例如:
NOT 0101
--------
1010
所以在下面的代码中,我期望得到1010,但我得到的是负数。虽然我用unsigned 类型定义了值,但这怎么可能?
#include <iostream>
#include <stdio.h>
#include <string>
#include <bitset>
using namespace std;
int tob(int num) {
if (num == 0)
return 0;
return (num % 2) + 10*tob(num/2);
}
long unsigned int tol(string st) {
long unsigned int num = bitset<100>(st).to_ulong();
return num;
}
int main()
{
unsigned int x = tol("0101");
unsigned int z = ~x;
printf("%10d (decimal %u)\n", tob(z), z);
// -110 (decimal -6)
cout << tob(z) << endl; // -110
cout << z << endl; // -110
}
我如何在 C++ 中从 not 0101 获取 1010?
谢谢!
【问题讨论】:
-
您似乎在代码中以奇怪的方式混合了二进制和十进制表示。我不确定您要完成什么,但您可以使用
std::bitset打印数字的二进制表示,如以下问题所示:*.com/questions/7349689/… -
这与你问的关于 go 的问题基本相同:*.com/q/32213029
-
你的
tob接受int并返回int,你用%d打印出来,你问我们为什么unsinged numbers变成了负数?
标签: c++ bit-manipulation long-integer bitwise-operators bitset