c++ 为什么输出结果不同?[按位操作]

gdx19jrr  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(193)
#include <iostream>
using namespace std;

// Complement of Base 10 Integer 

int main()
{
    int n, mask = 0, ans;
    cout << "enter a number : ";
    cin >> n;
    if (n == 0)
    {
        cout << 1;
    }
    else
    {
        while (n != 0)
        {
            mask = (mask << 1) | 1;
            n = n >> 1;
        }
        ans = (~n) & mask;
        cout << "ans = " << ans;
    }
    return 0;
}

这是整数的补码的代码
当我给出一个输入n = 5时,输出是ans = 7,它应该是ans = 2
有谁能解释一下这里面有什么问题吗?
我是这个平台的新手,请不要删除我的问题。我之前的问题也因为不喜欢而被删除了。我是来学习的,还在学习中。

46qrfjad

46qrfjad1#

n的值通过以下循环更改为0

while (n != 0)
        {
            mask = (mask << 1) | 1;
            n = n >> 1;
        }

如果以后要使用n的值,请将其保存到其他位置。

int n_original = n; // save the value of n
        while (n != 0)
        {
            mask = (mask << 1) | 1;
            n = n >> 1;
        }
        ans = (~n_original) & mask; // use saved value

相关问题