C语言运算符

本文详细介绍了C语言中的六种位运算符:按位与、按位或、按位异或、按位取反、左移和右移,并通过实例展示了它们的应用场景,如清零、设置位、交换变量等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言位运算
有6种: &, | , ^(亦或), <<(左移), >>(右移)。
注意:参与位运算的元素必须是int型或者char型,以补码形式出现。

按位与&

&运算常应用于:

  • 迅速清零
  • 保留指定位
  • 判断奇偶性
    a & 1 = 1;则a为奇数
    b & 1 = 0;则a为偶数
#include <stdio.h>

int main() 
{
    //C运算符之&
    int a = 4;     //00000000 00000000 00000000 00000100
    int b = 7;     //00000000 00000000 00000000 00000111
    int c = a & b; //00000000 00000000 00000000 00000100
    printf("c = %d\n",c);//4
    return 0;
}

按位或|

按位或(“|”)用途:设定数据的指定位

#include <stdio.h>

int main() 
{
    //C运算符之&
    int a = 9;     //00000000 00000000 00000000 00001001
    int b = 5;     //00000000 00000000 00000000 00000101
    int c = a | b; //00000000 00000000 00000000 00001101
    printf("c = %d\n",c);//13
    //用途,设定数据的指定位,如下为指定后8位全为1
    a = a|0xFF;//0xFF,转为十进制就是255,转为二进制就是11111111
    printf("a = %d\n",a);
    return 0;
}

按位异或^

异或 就是位相同等于零,相异等于1

按位异或作用:
1.定位反转
2.交换数值

//交换a和b的值
a=a^b;
b=b^a;
a=a^b;
#include <stdio.h>

int main() 
{
    //C运算符之&
    int a = 9;     //00000000 00000000 00000000 00001001
    int b = 5;     //00000000 00000000 00000000 00000101
    int c = a ^ b; //00000000 00000000 00000000 00001100
    printf("c = %d\n",c);//12
    //用途
    //1.定位反转
    //2.交换数值
    //a = a|0xFF;//定位反转
    //交换数值
    //00000000 00000000 00000000 00001100   a = a ^ b;
    a = a ^ b;
    //00000000 00000000 00000000 00000101   b
    //00000000 00000000 00000000 00001100   a
    //00000000 00000000 00000000 00001001   b = b ^ a; 
    b = b ^ a;
    //00000000 00000000 00000000 00001100   a
    //00000000 00000000 00000000 00001001   b
    //00000000 00000000 00000000 00000101   a = a ^ b;   
    a = a ^ b;
    printf("a = %d,b = %d\n",a,b);
    return 0;
}

按位取反~

~(00001001//取反后 11110110

左移、右移

让二进制左移N位,高位丢弃,低位补0,得到的 新值 = 原值*2^N
作用:实现二倍乘除运算(右移几位相当于除于二的几次方。左移几位,相当于乘上二的几次方。)
问题:int是有符号类型,左移可能会把符号左移出去,发生溢出

#include <stdio.h>

int main() 
{
    int a = 3; //00000000 00000000 00000000 000000011
    a = a << 4;//00000000 00000000 00000000 000011000
    printf("%d\n",a);//左移几位,相当于乘上二的几次方 3* (2^4) =3*16 = 48 

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值