《算法很美》笔记整理—Chpter 1

《算法很美》笔记整理—Chpter 1

本章内容主要围绕着位运算展开

  1. 位运算:

    ​ 使用符号 “>>>” 进行右移操作的时候是用0来填充高位;

    用于unsigned, 不存在符号 “<<<”

    使用符号 “>>” 进行右移操作的时候是用符号位填充高位;

    对于int数据类型: 1 << 35 与 1 << 3 相同, 超过32则%32;

    计算机通过模运算实现加减法的统一

    对于long数据类型: 类似, 但是超过64则%64;

  2. “奇巧淫技”:

    ​ ① 判断奇偶: X & 1 = 1 => X是奇数; X & 1 = 0 => X是偶数;

    ​ (根据最后一位数 0/1 就可以判断奇偶性,其他部分可以不考虑

    ​ ② 获取二进制第k位上为1 or 0: 先将 1 左移 n 位 到 k;

    ​ X & (1 << n) = 1 => 第k位上为1; X & (1 << n) = 0 => 第k位上为0;

    ​ (n是移动位数, 1 << n 除了该位为 1, 其余部分为 0,起到了屏蔽作用

    ​ ③ 交换两个整数: a = a^b; b = b^a; a = a^b;

    ​ (注意要处理 a == b 的情况, 否则都会变成 0

    ​ (注意只能是整数,不需要中间变量temp,且运算速度和运算范围要好于以下方法

    ​ a = a+b; b = a-b; a = a-b;

    ​ ④求绝对值: int i = a >> 31; return ( ( a^i ) - i );

    ​ (a >> 31 得到的就是 a 的符号位, 如果 a < 0, 那么 i = 0xFFFFFFFF = -1;

    如果 a >= 0, 那么 i = 0x00000000 = 0;

    在这里插入图片描述
    Summary: 异或, 可以理解为是不进位加法。 1^1 = 0, 0^0 = 0, 1^0 = 1。

    性质: 1) 交换律: a^b = b^a

    2) 结合律: abc = a(bc)

    3) x^x = 0 x^0 = x(0是不影响异或的结果的)

    4) ABB = A^0 = A (与连续同因子做异或运算)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值