• 位运算


    1.位与运算  &
    注意:& 和 && 是有区别的。前面这个是位与运算,后者是逻辑与运算,也就是算数运算

    1 1 1 1 
    0 1 0 1 
    看看位与运算的真值表  结论:全真为真。其他为假
    0 & 1    0
    1 & 0    0
    1 & 1    1
    0 & 0    0

    0x5b  5  0101
     
    例如:
    0xb5 & 0123      0x11
    001101110
    010101111
    00000101110  02e

    0x2c  & 0x2b     0x28
    1100
    1010 1000

    2.位或运算
    真值表
    0 | 0  0

    0 | 1  1

    1 | 0  1

    1 | 1  1

    位或运算 (|)和逻辑或(||)区别

    区别和上面的与类似 有1就为1

    027 | 0x74
    00010111
    01110101

    0111 0111 0x77

    0x1f  |  0xa5   0xbf

    0x5f | 0x50    0x5f

    3、位异或 (^)

    真值表;
    1 ^ 0   1
    1 ^ 1   0
    0 ^ 0   0
    0 ^ 1   1

    从真值表能得出结论:相同的就为0,不同的为1

    异或就是相当于把两个相异的进行或操作

    25 ^ 0263 

    0x5f ^ 0xa4   0xfb
    01011111
    10100100    1111 1011  0xfb

    0x47 & 0x38    0xa5 | 0x4f  0x14 ^ 0124

    0x0   0xef   0x40 0x004  0xa8

    000010100
    001010100
    0100 0000

    4、位取反 ~
    注意:在C语言中位取反是~,逻辑取反!
    规则:把二进制数进行一个变化。1变成0,0变成1

    总结:任何非0的数被逻辑取反在取反就会得到1;
     任何非0数被位取反在取反就会得到本身;

    ~0x5f    ~0124 ~47
    0xa0     065    0x2b

    总结:

    5.左移动  <<  右移动 >>
    在c语言中,进行位左移操作的时候要取决于数据类型
    对于无符号数,左移时右侧补0
    对于无符号数,右移动左侧补0;
    对于有符号数, 左移动时右侧补0
    对于有符号数,右移时左侧补符号位(如果是正数九补0,负数补1);

    在嵌入式中。在研究位移动,为了方便、快捷。我们规定移位都是无符号的数。

    6.左移 <<

    s数<< 多少位

    0x54 <<2  
    01010100  01010000    0x50

    0xf4 <<1  0x6b<<6
    0xe8      0xc0

    7.右移
     
    数>> 多少位

    0x54 >>2 

    01010100 


    0xf4 >>4  0xd1 >>1
    0x0f       0x68

    升级:

    0x17  的第2位变成0
    00010111     结果:00010011  0x13
    &
    11111011   取反:00000100  把1进行变化00000001  ~(1<<2) & 0x17


    00011011  0x1b  请把第2位变成1;00011111

    00011011
    00000100  或运算  00011111
    00000100  和00000001   (1<<2) | 0x1b   00011111
     

  • 相关阅读:
    Entity Framework 学习高级篇1—改善EF代码的方法(上)
    Entity Framework 学习高级篇2—改善EF代码的方法(下)
    Entity Framework 学习中级篇5—使EF支持Oracle9i
    Window API 之 PostMessage (消息投递)
    从image/xpng谈ContentType(s)
    SQL中使用 N 前缀的原因
    Delphi初浅入门笔记之一 :ObjectPascal基础
    写入DLL文件
    SQL Server 2005和SQL Server 2000中bit类型的区别
    HTML <a> 标签的 target 属性说明
  • 原文地址:https://www.cnblogs.com/wangjinshan/p/7066954.html
Copyright © 2020-2023  润新知