按位与运算练习

题目描述

学习使用按位与 &。

程序分析

0&0=0; 0&1=0; 1&0=0; 1&1=1 。

源代码


#include <stdio.h>
int main()
{
    int a,b;
    a=077;
    b=a&3;
    printf("a & b(decimal) 为 %d \n",b);
    b&=7;
    printf("a & b(decimal) 为 %d \n",b);
    return 0;
}

 变量初始化与运算

  • a = 077 ;  077  是八进制数(以  0  开头标识),转十进制为 63,二进制为  0011 1111 。

  •  b = a & 3 

  • 3  的二进制是  0000 0011 ,按位与运算规则是对应二进制位都为  1  时结果位才为  1 

运算过程

a:   0011  1111

3:   0000  0011

&:   0000  0011   (十进制为 3 )

 “对应二进制位都为 1” 是按位与( & )运算的核心规则,简单说是把两个数转成二进制后从右往左逐位对齐,只有当同一位置上的二进制数字都是 1 时,结果的这一位才是 1;只要有一个是 0,结果这一位就为 0 。
比如代码里  a = 63 (二进制  0011 1111  ),和  3 (二进制  0000 0011  )

二进制位543210
a 的二进制001111
3 的二进制000011
按位与结果(都为1才是1)000011

 可以看到,只有最右边两位(位 0、位 1 )上,两个数的二进制都是 1,所以结果的这两位是 1,最终结果就是 0000 0011 (十进制 3  )。

所以 b 的初值为 3,输出 a&b(decimal)为3。

  • b &= 7(等价于  b = b & 7 )
  • 7  的二进制是  0000 0111 ,当前  b = 3 (二进制  0000 0011  ),按位与运算:

b:  0000  0011

7:  0000  0111

&:  0000  0011  (十进制为 3) 

输出 a&b(decimal)仍为3。

以上示例输出结果

a & b(decimal) 为 3 
a & b(decimal) 为 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值