按位运算符,用于简单地翻转整数中的所有位?
2022-08-31 16:03:58
我必须翻转整数的二进制表示中的所有位。鉴于:
10101
输出应为
01010
与整数一起使用时,实现此目的的按位运算符是什么?例如,如果我正在编写一个像 ,正文中会有什么?我只需要翻转数字中已经存在的内容,而不是整数中的所有32位。int flipBits(int n);
我必须翻转整数的二进制表示中的所有位。鉴于:
10101
输出应为
01010
与整数一起使用时,实现此目的的按位运算符是什么?例如,如果我正在编写一个像 ,正文中会有什么?我只需要翻转数字中已经存在的内容,而不是整数中的所有32位。int flipBits(int n);
一元运算符是按位否定。如果您需要的位数少于适合的位,那么您需要在事后掩盖它。~
int
&
只需使用按位非运算符。~
int flipBits(int n) {
return ~n;
}
要使用 k 个最低有效位,请将其转换为正确的掩码。
(我假设你至少想要1位,这就是为什么掩码从1开始)
int flipBits(int n, int k) {
int mask = 1;
for (int i = 1; i < k; ++i)
mask |= mask << 1;
return ~n & mask;
}
正如Lưu Vĩnh Phúc所建议的那样,人们可以创建面具而不是使用循环。(1 << k) - 1
int flipBits2(int n, int k) {
int mask = (1 << k) - 1;
return ~n & mask;
}