2.1 C语言下的位运算

位运算符:

注:运算量只能为整型和字符型数据,不能是实数型的数据。

当进行&运算时:0&1=01&0=01&1=10&0=0

当进行|运算时:0|1=11|0=11|1=10|0=0

当进行^运算时:0^1=1;1^0=1;1^1=1;0^0=0;

异或的交换:

a=a^b;b=b^a;a=a^b;

证明:因为a=a^b,b=b^a,a=a^b;

              所以当计算前两个时可得:b=a.

              计算第三个可得到的结果为:a=b.

当进行<<运算时:如a=15;a=a<<2,a的二进制码为00001111,则左移两位后二进制为:00111100(高位左移溢出,舍去),即a=60a=15*22次幂(这个公式只能是在溢出的最高位里不含有1的情况下使用)。

当进行>>运算时:当无符号时,如a=15;a=a>>1时,a的二进制码为00001111,则右移一位后二进制为:00000111,即a=7.

当有符号时,如a=-10时,对a进行a=a>>1时,则a在计算机内的表示的二进制为a的补码(原码取反加1),另在计算机里负数进行右移时有两种表现形式,1.逻辑右移(即最高位加0)。2.算数右移(最高位加1)。

如下介绍两种不同的右移方式:

a=-10,其原码取绝对值为00001010,取反为:11110101,补码为:11110110,则当其是逻辑右移时,其右移的补码为:01111011,再求出其原码为:10000101。最高位的1为符号。所以可得到输出结果为:a=-5

当进行算数右移时,其右移后的补码为:11111011,求出其原码为:00000101,即输出的结果为:a=5

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值