黑马程序员-C语言学习日记二之位运算符小结

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

位运算符

1.按位与
二进制运算符&通过对两个操作数逐位进行比较产生一个新值.对于每个位,只有两个操作数的对应位都为1时结果才为1

 10110110
&
 11011000
=
 10010000

2.按位或
二进制运算符|通过对两个操作数逐位进行比较产生一个新值.对于每个位,只要有一个操作数的对应位为1时结果就为1

 10110110
|
 11011000
=
 11111110

3.按位异或
二进制运算符^通过对两个操作数逐位进行比较产生一个新值.对于每个位,只有两个操作数的对应位不相同时,结果才为1,即01得1, 10得1,00得0,11得0;

 10110110
^
 11011000
=
 01101110

4.按位取反
二进制运算符~对一个操作数逐位进行取反,0变1,1变0

 10110110
~
=
 01001001

5.左移
将<<左侧操作数的值的每位向左移动,移动的位数由右侧操作数指定.空出的位用0填充,并丢弃被移出左端操作数左端的位

10010111 <<2
结果值
01011100

6.右移
将>>左侧操作数的值的每位向右移动,移动的位数由右侧操作数指定.空出的位用0填充,并丢弃被移出左端操作数右端的位

10010111 >> 2
结果值
00100101

最后补充:以上的位运算符都不会改变左操作数本身

附上使用位运算符来实现输出一个数的二进制数值的代码

void print(int n)
{
    //先求得这个数一共有多少个字节,再乘以8得到位数,-1是为了右移计数
    for (int i = (sizeof(n) << 3) -1  ; i >=0; i--) {
        //将这个数右移i位,即将这个数第i+1位上的数取到第1位上
        //再判断这个位上的值是否为1,输出它
        printf("%d",n >> i & 1);
        //每隔8位数字,打印一个逗号,以便查看结果
        if (i % 8 == 0 && i!= 0) {
            printf(",");
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值