簡體   English   中英

C++中的位操作

[英]Bit operation in c++

我想對一個數字與 4294967295 ie(pow(2,32)-1) 進行按位異或。 我在這里直接使用:number^4294967295。 但是結果是錯誤的。那么這個操作是怎么發生的呢。 建議是否有更好的方法來做到這一點。

PS-我在https://www.hackerrank.com/challenges/flipping-bits 中使用這種技術。

EDIT1:1 ^ 4294967295(00000000000000000000000000000001 ^ 11111111111111111111111111111111)的結果應該是4294967294(11111111111111111111111111111110)。

編輯2:包含的代碼:

#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. 內部變量; --> 改為 --> unsigned int var;

  2. int 溫度 = 4294967295; --> 改為 --> unsigned int temp = 4294967295;

有符號整數的范圍是 [−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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM