A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xqlyn123 中级黑马   /  2015-10-28 11:28  /  881 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

   位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作
运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。
C语言提供的位运算符列表:
运算符
含义
描述
&
按位与
如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
|
按位或
两个相应的二进制位中只要有一个为1,该位的结果值为1
^
按位异或
若参加运算的两个二进制位值相同则为0,否则为1
~
取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<<
左移
用来将一个数的各二进制位全部左移N位,右补0
>>
右移
将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补
1、“按位与”运算符(&)
    按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,
则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。按位与其
实与逻辑上“与”的运算规则一致。逻辑上的“与”,要求运算数全真,结果才为真。若,
A=true,B=true,则A∩B=true 例如:3&5 3的二进制编码是11(2)。(为了区分十进制和其他进制,本文规
定,凡是非十进制的数据均在数据后面加上括号,括号中注明其进制,二进制则标记为2)内存储存数据
的基本单位是字节(Byte),一个字节由8个位(bit)所组成。位是用以描述电脑数据量的最小单位。二
进制系统中,每个0或1就是一个位。将11(2)补足成一个字节,则是00000011(2)。5的二进制编码是
101(2),将其补足成一个字节,则是00000101(2)
    按位与运算:
         00000011(2) & 00000101(2) = 00000001(2)
    由此可知3&5=1
    c语言代码:
        #include
        main()
        {
             int a=3;
             int b = 5;
             printf("%d",a&b);
        }
按位与的用途:
(1)清零
    若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:
原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。
例:原数为43,即00101011(2),另找一个数,设它为148,即10010100(2),将两者按位与运算:
     00101011(2)& 10010100(2)= 00000000(2)
    c语言源代码:
        #include
        main()
        {
             int a=43;
             int b = 148;
             printf("%d",a&b);
        }
(2)取一个数中某些指定位
若有一个整数a(2byte),想要取其中的低字节,只需要将a与8个1按位与即可。
    a 00101100 10101100
    b 00000000 11111111
    c 00000000 10101100
(3)保留指定位:
与一个数进行“按位与”运算,此数在该位取1.
例如:有一数84,即01010100(2),想把其中从左边算起的第3,4,5,7,8位保留下来,运算如下:
     01010100(2) & 00111011(2) = 00010000(2)
即:a=84,b=59
      c=a&b=16
    c语言源代码:
        #include
        main()
        {
             int a=84;
             int b = 59;
             printf("%d",a&b);
         }
2、“按位或”运算符(|)
    两个相应的二进制位中只要有一个为1,该位的结果值为1。借用逻辑学中或运算的话来说就是,一真为真。
例如:60(8)|17(8),将八进制60与八进制17进行按位或运算。
00110000 | 00001111
      00111111
    c语言源代码:
        #include
        main()
        {
             int a=060;
             int b = 017;
             printf("%d",a|b);
        }


2 个回复

倒序浏览
p495416980 来自手机 中级黑马 2015-10-28 12:39:10
沙发
这个只记住了概念,没进行过实际计算,老师说用处比较小,了解即可
回复 使用道具 举报
说不定以后有用呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马