码迷,mamicode.com
首页 > 其他好文 > 详细

位运算

时间:2020-06-08 10:54:19      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:负数   偶数   数据   lob   div   http   turn   补码   返回   

位运算

1. 算法分析

原码和补码
原码: x
反码: ~x
补码: y = ~x + 1

移位

  1. 左移: x << n 等价于 x * (2 ^ n)
    例如:x << 2为 1 * (2 ^2)
  2. 右移: x >> n 等价于 x / (2 ^ n), 如果x为正数,那么在最高位补上0;如果x为负数,那么在最高位补上1

使用异或来生成配偶
(0, 1), (2,3 ), (4, 5), (6, 7)为配偶对
0^1 = 1, 1 ^ 1 = 0
2^1 = 3, 3 ^ 1 = 2
4 ^1 = 5, 5 ^ 1= 4
即一个数字异或1得到它的配偶

得到最后一个1:lowit运算
lobit(n) = n & -n;

判断两个数的奇偶性是否相同

  1. a与b的奇偶性不同 <=> 则(a + b ) & 1 = 1;
  2. a与b的奇偶性相同 <=> 则(a + b ) & 1 = 0;

异或性质
结合律: (a ^ b) ^ c == a ^ (b ^ c)
对于任何x,有: x ^ x = 0, x ^ 0 = x
自反性: a ^ b ^ b = a

数据范围
技术图片

2. 板子

判断一个数字每一位上的数字是几

int n = 10;
for (int i = 3; i >= 0; --i) cout << (n >> i & 1);

判断一个数是奇数还是偶数

int n = 10;
if (n & 1) cout << "奇数";
else cout << "偶数" ;

lowbit操作

// 返回最后一个1及其后面的数字:比如10 = (1010)2, 运行一次lowbit,返回10;14 = (1110)2,运行一次lowbit,返回10
int lowbit(int x)
{
    return x & -x;
}

位运算

标签:负数   偶数   数据   lob   div   http   turn   补码   返回   

原文地址:https://www.cnblogs.com/spciay/p/13064118.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!