大家好,欢迎来到IT知识分享网。
目录
1、移位操作符
分为左移操作符(<<)和右移操作符(>>)。
左移操作符:
移位规则:左边抛弃,右边补0。
什么意思呢,现在就让我来仔细讲解一番。
比如我们定义一个整型变量a,给它赋初值5.如int a=5;然后将a左移,即a<<2,得到的结果又是多少呢?在讲之前,我们首先要了解到整型5在内存中是怎样存储的,不太清楚的友友们就请看我之前一篇博客整数的3种表达形式及在内存中的存储啦,里面有详细讲解。整型5是以补码的形式来存储的。而将5左移2位就是将存储在内存中的二进制位向左移动2位并将此2位抛弃,右边用0补齐。最后得到的就是5<<2后的结果啦,可以用一下图来简单描述一下~
根据上图可知a<<2后得到的结果就是20。
右移操作符:
首先右移运算分为两种。算数移位和逻辑移位。
算数移位规则:左边用该值的符号位填充,右边丢弃。
逻辑移位规则:左边用0补充,右边丢弃。
具体什么意思呢,我们还是来看看几个例子,如将5右移移位,即5>>1,得到的是多少呢?
如果是算数移位的话,就是将5存储在内存中的二进制位向右移动1位并将这一位抛弃,左边用该值存储的二进制位的符号位补齐。如下图:
所以5>>1得到的结果就是2。那逻辑移位呢,逻辑移位就是左边用0,补充,右边抛弃。对正数而言,其符号位就是0,所以算数移位与逻辑移位得到的结果相同,逻辑移位也可以用上图来表示啦,得到的结果也是2。
若将-5右移一位呢,得到的结果又是什么呢。我们先来看看算数移位,就不多赘述了,请看下图:
所以-5>>1算数移位得到的就是-3。
同理,我们来看看-5>>1逻辑移位的得到的是什么吧~
因为最高位是0,所以最后的结果就是3啦~。但是一般条件下都是用的算数移位哈。
2、位操作符
& 按位(二进制位)与
| 按位(二进制位)或
^ 按位(二进制位)异或
我们直接来看这段代码,大家可以先猜一下最后输出的是哪三个数呢:
int main()
{
int a = 3;
int b = -5;
printf("%d %d %d", a & b, a | b, a ^ b);
return 0;
}
我们先来分析一下:按位与就是将两个数存储的二进制位作比较,两者均为1才为1,否则为0。因此a&b用图来分析就是:
因此a&b的结果就为3了。
按位或就是 将两个数存储的二进制位作比较,两者中有一个为1就为1,否则为0。因此a|b用图来分析就是:
所以a|b的值就是-5了。
按位异或就是 两个数存储的二进制位作比较,两者相同为0,相异为1,因此a^b用图来分析就是:
所以a^b的结果就是-8啦。
最后我们让程序来运行一下:
是和分析的一样吧~~~
到这里就结束啦,希望友友们能给个赞哈~~~
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/11073.html