位运算(& | ^ ~ << >>)

一、位运算基础概念
 
计算机中的数据以二进制形式存储,每一个数据位(bit)只能表示0或1两种状态。位运算就是直接对这些二进制位进行操作的运算,它不关心数据的具体类型(如整数、字符等),而是专注于二进制位的组合和变换。
 
在进行位运算时,通常会涉及到操作数和操作符。操作数是参与运算的数据,而操作符则定义了具体的运算规则。不同的编程语言对位运算的支持略有差异,但基本的操作符和运算逻辑是相通的。
 
二、常见位运算操作符
 
1. 按位与(&)
 
按位与操作符 & 对两个操作数的每一位进行比较,如果对应位都为1,则结果位为1,否则为0。
 

    /*与运算 &
    以 5 7为例
    0101(5的二进制)
    0111(7的二进制)
    0101(&的结果)
    */

   int a=5;

   int b=7;

    cout<<(a&b)<<endl;


2. 按位或(|)
 
按位或操作符 | 对两个操作数的每一位进行比较,如果对应位至少有一个为1,则结果位为1,否则为0。
 

    /*或运算 |
    以 5 7为例
    0101(5的二进制)
    0111(7的二进制)
    0111(|的结果)
    */

   int a=5;

   int b=7;

    cout<<(a|b)<<endl;


 
3. 按位异或(^)
 
按位异或操作符 ^ 对两个操作数的每一位进行比较,如果对应位不同,则结果位为1,否则为0。
 

    /*异或运算 ^ (无进位相加)
    以 5 7为例
    0101(5的二进制)
    0111(7的二进制)
    0010(^的结果)
    */

   int a=5;

   int b=7;

    cout<<(a^b)<<endl;



 
4. 按位取反(~)
 
按位取反操作符 ~ 对操作数的每一位进行取反(0变1,1变0)。需要注意的是,取反操作后结果会根据计算机的补码规则进行转换。

    /*取反运算 ~
    以 5 为例
    0101(5的二进制)
    1010(~的结果)
    */

   int a=5;

    cout<<(~a)<<endl;


5. 左移(<<)
 
左移操作符 << 将操作数的二进制位向左移动指定的位数,右侧空位补0。左移操作相当于对数值乘以2的幂次方。例如:
 

    /*左移运算 <<
    以5为例
    0101(5的二进制)
    1010(<<的结果)
    */

   int a=5;

    cout<<(a<<1)<<endl;


6. 右移(>>)
 
右移操作符 >> 将操作数的二进制位向右移动指定的位数,左侧空位根据符号位填充(正数补0,负数补1)。右移操作相当于对数值除以2的幂次方并向下取整。

    /*右移运算 >>
    以5为例
    0101(5的二进制)
    0010(>>的结果)
    */

   int a=5;

    cout<<(a>>1)<<endl;


总结
 
位运算是计算机底层的重要操作方式,掌握位运算可以帮助我们编写出更高效、简洁的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值