c++中的位操作
Bit operation in c++
我想取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;
}
通过以下更改,您的代码将正常工作:
-
int变量;
-
int temp = 4294967295;
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
相关文章:
- 对字符串进行位操作
- 对字符数组中的元素执行逐位操作
- 逐位操作的隐式类型转换
- 如何进行特定的位操作?
- C++避免位操作完全移位
- 使用双包装器类进行位操作(C++、clang)修复性能下降问题
- 使用位操作优化检查
- 子集相关位操作
- 使用 c++ 提升库的按位操作
- 位操作和异或
- 位操作将最左侧的设置位转换为右侧交替位?
- 为什么对小于 4 个字节的整数类型的位操作会发生意外行为?
- POD 类型的原子按位操作
- 如何使用位操作在单个整数中编码和解码两个数字
- __int128的位操作
- 使用位操作会影响内存消耗?
- 在具有位操作的函数中获得值
- C/C 位操作不会导致预期输出
- 在数组大小中使用位操作的原因
- 了解C++位操作中的二进制转换实现