运维开发网

C语言移位运算符怎么用

运维开发网 https://www.qedev.com 2022-05-30 15:51 出处:网络
这篇文章主要介绍了c语言中的移位运算符,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

这篇文章主要介绍了c语言中的移位运算符,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

移位运算符是编程中的一种位运算运算符。移位运算符可以对二进制数进行移位。

C:
中提供了两个移位运算符

左移运算符:lt;lt;
右移运算符:gt;gt;

左移运算符(lt;lt;)int main(void){int a = 4;//把a的二进制位向左移动1位int b = a lt;lt; 1;printf("b = %d", b);return 0;}

在32-8位操作系统中,int类型占用4个字节,1个字节有8位,所以变量A在内存中占用32位。

将4赋给变量A,4的二进制形式存储在A中。


a将向左移动一位


0的最高位被丢弃,最后一位用0填充


可以看到,A左移一位的结果是1000,换算成十进制就是8,所以打印B的结果是8。


右移运算符(gt;gt;)int main(void){int a = 10;//把a的二进制位向右移动1位int b = a gt;gt; 1;printf("b = %d", b);return 0;}

将10赋给变量A,并将10表示为二进制形式


将10向右移动一位,并丢弃最低位的0


最高补码位是0


转换成十进制的最终结果是5


我们可以看到,打印B的最终结果确实是5。

这里需要注意的是,右移分为算术右移和逻辑右移

算术右移位:右丢弃,左补码符号位
逻辑右移位:右丢弃,左补码0
二进制序列存入内存时,最高位0表示正数,最高位1表示负数。
因为10是正数,所以不管是算术右移还是逻辑右移,最高位都用0填充。那么这里的右移运算是算术右移还是逻辑右移呢?
整数有三种二进制表示:原码、反码、补码
原码:直接按数值写的二进制序列
反码:原码的符号位不变,其他位逐位取反
补码:反码加1

计算机内存值的存储方式是补码。

int main(void){int a = -1;//把a的二进制位向右移动1位int b = a gt;gt; 1;printf("b = %d", b);return 0;}

以-1为例

-1的原始代码:


-1的倒数:


-1的补码:


因为补码存储在计算机中,所以将-1向右移动1位,并丢弃最低位1


我们先来看看B的打印结果


b的值为-1,表示最高补码为1。此时,执行算术右移。
需要注意的是,虽然A已经右移,但是A的值没有变化,我们也可以打印A。

int main(void){int a = 10;//把a的二进制位向右移动1位int b = a gt;gt; 1;printf("a = %d\n", a);printf("b = %d", b);return 0;}


A的结果还是10。

int a = 10;int b = a + 1;

它与上面的代码相同。当执行移位操作时,被移位对象的值不会改变。

这就是这篇关于C语言中移位操作符的文章。关于C语言中移位运算符的更多内容  

0

精彩评论

暂无评论...
验证码 换一张
取 消