C++不输出...... +1否定

use*_*604 -4 c++

如何制作输出NOT(x)的程序?

例:

  • 12至3
  • 0到1
  • 2比1

解释:

  • 1100至0011
  • 0到1
  • 01至10

    printf("%i\n%i\n%i\n", ~12, ~0, ~2);

打印:

-13
-1
-3

printf("%i\n%i\n%i\n", !12, !0, !2);
Run Code Online (Sandbox Code Playgroud)

打印:

0
1
0
Run Code Online (Sandbox Code Playgroud)

Who*_*aig 5

你的printf的可变参数正被提升为int,把它想象为先在变量中存储你的位(int),然后在它们上执行bit-not:

int x = 12;     // 0x0000000C
int y = ~x;     // 0xFFFFFFF4 
Run Code Online (Sandbox Code Playgroud)

y现在是负的signed int值.

将您的格式字符串和值更改为无符号,它可能更接近您要查找的内容:

int main(int argc, char *argv[])
{
    unsigned int x = 12;
    unsigned int y = ~x;
    printf("%u:%u\n",x,y);
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

结果:

12:4294967283
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找打印值的实际"位"的功能,可以在这里找到一个很好的起点,因为printf()没有本机位二进制打印功能.

最后,如果您对翻转感兴趣的是前导最重要的非零位,请确保在输入值为零(0)时对您的情况进行特殊调整.你真的需要一个"这很多位对我来说很重要"的价值来真正做到这一点.

编辑:一个非常低效的BitString:显然,如果没有数字类型 的引导模板参数,这将无法工作.自行决定使用(并承担风险).

template<typename T, size_t N=sizeof(T)*8>
std::string bit_string(T value, size_t maxbits=N)
{
    static const char *one = "1";
    static const char *zero = "0";
    std::string result;

    maxbits = std::min(maxbits, N);
    for (size_t i=0;i<maxbits;i++)
    {
        result = ((value & T(1)) ? one : zero) + result;
        value >>= 1;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)