zoukankan      html  css  js  c++  java
  • 位元 字组 二进制运算 以及 编码

    字组就是把一个数的二进制的各位看成数组~~

    <1>计算机中的反码与补码;

    最高位:正数为0,负数为1;

    正整数的原码,反码,补码均相同;

    负数的反码:符号位不变,在原码的基础之上数值位取反;

    负数的补码:求出反码后加1;如-1(只看8位);原码:1000 0001 反码:1111 1110 补码:1111 1111; //在使用scanf()输入到EOF时返回-1;这是我们可以使用位取反运算符变为0,即将所有(包括符号位)的1变为0~~

    <2>位运算

    1.把字组中最靠右的1变为0:  如 0101 1110 => 0101 1100

      x & (x - 1);

    2.取出字组中最靠右的1 (数值不是第几位):  如 1010 0100 => 0000 0100

      x & (-x);  // 树状数组中的lowbit()

    3.最低位0变为1: 如 1010 0111 => 1010 1111

      x|(x+1)   //x+1具有递推性

    4.把字组尾部的1都变成0:如1010 0111 => 1010 0000

      x & (x + 1) //删除用 &

    5.把字组尾部的0变为1:如 1010 1000 => 1010 1111

      x | (x - 1) //添加用 |

    6.把字组中最靠右且值为0的位元变为1,其余位元置0; 如 1010 0111 => 0000 1000

      ~x & (x + 1) //注意取反

    7.把字组中最靠右且值为1的位元变为0,其余位元置1;如 1010 1000 => 1111 0111

      ~x | (x - 1) // x - 1只是将x的最低为1的位元置0;并且把尾部为0的位元变为1

    8.把字组尾部为0的位元置1,其余位元置0;如 1010 1000 = > 0000 0111

      ~x & (x - 1)  可以发挥处理器的某些指令级优化,还可以使用 (x & -x) - 1

    9.把尾部的所有值为1的位元都变成0,其他位都置为1;如 1010 0111 => 1111 1000

      ~x | (x+1)

    10.把最靠右且值为0的位元及其右方所有值为1的位元都置为1,其他位元设为0;如 0101 0111 = > 0000 1111

      x ^ (x + 1) // xor同样能把原数中的字组1删除

    待续~~

  • 相关阅读:
    java-多态
    java-继承
    java-访问修饰符
    mysql基础入门
    子查询
    多表查询
    mysql表(多对多)
    myslql主外键约束
    Sql语句分类
    Redis的一些介绍
  • 原文地址:https://www.cnblogs.com/hxer/p/5217841.html
Copyright © 2011-2022 走看看