zoukankan      html  css  js  c++  java
  • 二进制的学习总结

    二进制的基础

      and &    (按位取与)  1 & 1  =  1   1 & 0 = 0  0 & 0 = 0  0 & 1 = 0

      or    |      (按位取或)  1 | 1 = 1  1 |  0 = 1  0 | 0 = 0  0 | 1 = 0

      xor    ⊕/^  (按位异或)   1⊕1 = 0  1⊕0 = 1  0 ⊕0 = 0  0 ⊕1 = 0

        lsh  <<  (逻辑左移)将二进制数向左移动x位造成二进制数右边不足用0补足,左边高位溢出

        rsh >>   (逻辑右移)将二进制数向右移动y位造成二进制数左边补足用0补足,右边高位溢出

        not    ~     (按位取反)  每一位0变1,1变0

    注意:二进制操作的优先级好像很低,所以进行计算时可以多打写括号反正又不会累死

    二进制的基本操作

    读取x的第pos个二进制位:      (x >> pos)& 1;

    读取x的第pos位开始的cnt位:    (x >> pos)& ((1 << cnt) - 1);

    将x的第pos位置为1:        (1 << pos)| x;

    将x的第pos位置为0:        (~(1 << pos))& x;

    将x的第pos位取反:         (1 << pos) ⊕ x;

    将x的末尾的1提取出来:       x & (x ⊕ (x + 1));

    二进制中最低位的一个1的位置:      lowbit(x) = x & (-x);

    遍历二进制中所有的1的位置:    for(; x; x -= lowbit(x));

    判断一个数的奇偶性:         (x & 1) ? 偶数 : 奇数;

    对2的幂取模 :             x & ((1 << y)  - 1)

    二进制表示集合

      枚举子集  for(int i = x; i ; i = (i & (i - 1));  

     

  • 相关阅读:
    vue项目webpack配置terser-webpack-plugin 去掉项目中多余的debugger
    difference between count(1) and count(*)
    为什么PostgreSQL WAL归档很慢
    mysql_reset_connection()
    Oracle使用audit跟踪登录失败的连接信息
    .NET Standard 版本
    ASP.NET Web API版本
    我是如何用go-zero 实现一个中台系统的
    JAVA中文件写入的6种方法
    MySql 常用语句
  • 原文地址:https://www.cnblogs.com/2020pengxiyue/p/9322134.html
Copyright © 2011-2022 走看看