c++中的位操作

Bit operation in c++

本文关键字:位操作 c++      更新时间:2023-10-16

我想取4294967295的位异或,即(pow(2,32)-1)。这里我直接使用数字^4294967295。但结果是错误的。那么这个操作是如何进行的呢?建议是否有更好的方法。

p。S-我在https://www.hackerrank.com/challenges/flipping-bits使用这种技术。

Edit1: result of 1^4294967295 (000000000000000000000001^ 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111) shouldBe 4294967294 (1111111111111111111111111111111111111111111111111110).

Edit2: Code included:

#include <cmath>
#include <iostream>
using namespace std;
int main() {  
int t;
cin>>t;
int i=31;
while(t--){
    int  var;
    char arr[i];
    int temp = 4294967295;
    cin>>var;
    var= var^temp;
    cout<<var<<endl;
}
return 0;
}

通过以下更改,您的代码将正常工作:

  1. int变量;

  2. int temp = 4294967295;

  3. unsigned int temp = 4294967295

signed int的取值范围为[−2,147,483,648至2,147,483,647]

unsigned int的取值范围为[0到4,294,967,295]

这里有一个运算符。按位查看而不是

(生活)

#include <cstdint>
#include <iostream>
#include <iomanip>
int main() {
    uint32_t var;
    std::cin >> std::hex >> var;
    const uint32_t result = ~var;
    std::cout << std::hex << result << "n";
}

输出(给定1作为输入):

fffffffe

如果你坚持用你的方式,你需要使用无符号类型。它还有助于使用固定大小的类型(例如<cstdint>中的uint32_t),并且为了方便起见,用十六进制表示字面量(实际示例):

#include <cstdint>
#include <iostream>
#include <iomanip>
int main() {
    const uint32_t mask = 0xffffffff;
    uint32_t var;
    std::cin >> std::hex >> var;
    const uint32_t result = var ^ mask;
    std::cout << std::hex << result << "n";
}

输出(输入1时):

fffffffe