• 位运算: 取反 左右移


    首先谈一下  什么是为运算

    C语言是为描述系统设计的,因此它应该具有汇编语言所以完成的一些功能。C语言既有高级语言的特点,又具有低级语言的功能。因而具有广泛的用途和很强的生命力。

    运算符 含义
    & 按位与
      | 按位或
    ^ 按位异或
    ~ 取反
    << 左移
    >> 右移

      

       

    注意:

      (1)位运算符中除 ~ 外,均为二目运算符,即要求出侧各有一个运算量

      (2)运算只能是整型或字符型的数据,不能为实型数据 (ps: 下边

      


    原码, 反码, 补码 详解  这里十分详细不再赘述;


                  

    [+1] = [00000001] = [00000001] = [00000001]

    [-1] = [10000001] = [11111110] = [11111111]

     在计算机的存储单元中,使用的整数的补码形式进行存放。计算方式  例:

    编号 数值 原码 反码 补码 运算 结果(补码 十进制
    3 0000,0011 0000,0011 0000,0011 ①&② 0000,0001 1
    5 0000,0101 0000,0101 0000,0101 ①|② 0000,0111 7
    -5 1000,1001 1111,0110 1111,0111 ①&③  0000,0011 3
     ④ -1   1000,0001  1111,11110  1111,1111   ③&④  1111,1011  -5

     在这里我们有一个规律   补码的补码是原码

    异或运算符 ^

     异或运算符 ^ 也称 XOR 运算符。它的规则是若参加运算的两个二进位同号,则结果为0,异号则为1。

    编号 数值 原码 反码 补码 运算 结果(补码 十进制
    3 0000,0011 0000,0011 0000,0011 ①^② 0000,0110 6
    5 0000,0101 0000,0101 0000,0101
    -5 1000,1001 1111,0110 1111,1011 ①^③  1111, 1000 -8
     ④ -1   1000,0001  1111,11110   1111,1111   ③^④  0000, 0100 4

     异或的一个小技巧:a^b^a ==b;

    取反运算符 ~

    ~是一个头单目运算符,用来对一个二进制按位取反,即将 0 变 1,1变 0。

    编号 数值 原码 取反
    3 0000,0011 1111,1100

    ~运算符的优先级别比算术运算符(ps:优先级问题可参考该分类下 优先级问题的博文),例如:~a & b,先进行 ~a 然后进行 & 运算。

    左移运算符 <<

    编号 数值 原码 结果 
    3 0000,0011 0000,1100 

    左移的特征:将二进制数左移 2 位,右侧补 0  如若最高位左移后溢出,舍弃不起作用。

    例: 014(==12 (十进制))<<2,结果为 48 (十进制)

    右移运算符(>>)   

            

    编号 数值 原码 结果 
    17 0001,0001 0000,0100(4)(其实是不确定的

             

    1. 右移运算将一个位串信息向右移指定的位,右端移出的位的信息被丢弃。
    2. 对无符号数据,右移时,左端空出的位用0补充。对于带符号的数据,如果移位前符号位为0(正数),则左端也是用0 补充;
    3. 如果移位前符号位为1(负数),则左端用0或用1补充,取决于计算机系统
    4. 对于负数右移,称用0 补充的系统为“逻辑右移”,用1补充的系统为“算术右移”。

    四种运算的作用

    符号                          作用
    & 与0相与可清零 与1相与可保留原值
    | 与0相或可保留原值
     
    与1相或可全部设为1
    ^ 与0异或保留原值 与1异或比特值反转
    shi 在二进制数运算中,在信息没有因移动而丢失的情况下,每左移1位相当于乘2。如4 << 2,结果为16。
    shr 暂时不明确  
  • 相关阅读:
    记录日常Linux常用软件
    CentOS7.2重置root密码的处理方法
    Nginx配置文件详细说明
    ES项目实战
    foreachRDD
    Hive的数据倾斜
    SparkStreaming实战(数据库(NoSQL))
    Spark(4)
    SparkStreming中 `transform()`算子的 的使用
    RDD源码分析
  • 原文地址:https://www.cnblogs.com/causal360/p/4741886.html
Copyright © 2020-2023  润新知