C语言操作符

 % 和 /

除了 % 操作符之外,其他几个操作符可以作用于整数和浮点数。

对于 / 操作符如果两个操作符都为整数,执行整数除法,而只要有浮点数执行的就是浮点数除法。

% 操作符的两个操作必须为整数。



 

位移操作符(左移<<    右移>>(移动一位除以2))

右移>>(移动一位除以2)

int main(){

//例题一(整数)

    // int a=16;

    // int b=a>>2; //16/2/2=4

    // printf("%d\n",b);//得4

//例题二(负数)

    int a=-1;

    //储存到内存的是补码

    //100000000000000000000001 - 原码

    //111111111111111111111110 - 反码

    //补1 11111111111111111111111 丢1 - 补码

    int b=a>>1;

    printf("%d\n",b);//得-1

    return 0;

    }

左移<<(乘以2)

    int main(){

    int a=10;

    //00000000000000000000000000000101=5

    int b=a<<1;00000000000000000000000000001010=10

    printf("%d\n",b);//4

    return 0;

    }

 按位与--&和或--|

    int main()

    {

//按位与--&(二进制位相同为1,不同为0)

        // int a=3;//011

        // int b=5;//101

        // int c=a&b;//001

        // printf("%d\n",c);

//按位或--|(二进制位有1取1)

        int a=3;//011

        int b=5;//101

        int c=a|b;//111

        printf("%d\n",c);

        return 0;

    }

    //异或--^二进制位(相同为0,相异为1)

    int main()

    {

        // int a=3;//011

        // int b=5;//101

        // int c=a^b;//110

        // printf("%d\n",c);

        //例题:交换两个整形变量得数值

        int a=3;

        int b=5;

        printf("交换前:a=%d b=%d\n",a,b);

        a=a^b;//011和101=110

        b=a^b;//110和101=011=3

        a=a^b;//110和011=101=5

        printf("交换后:a=%d b=%d\n",a,b);

        return 0;

    }
 

//&--取地址操作符

int main ()

{

    int a=10;

    int* p=&a;//取地址操作符

    *p=20;//解引用操作符

    printf("a=%d\n",a);//20

    return 0;

}

//输出a=20

//按位取反(~)

int main(){

    int a=0;

    //~按(二进制)位取反

    //00000000000000000000000000000000  (0)

    //11111111111111111111111111111111 - 补码(取反后)

    //11111111111111111111111111111110 - 反码

    //10000000000000000000000000000001 - 原码(-1)

    printf("%d\n",~a);//打印的是原码(-1)
 

    //应用

    int b=11;        //00000000 00000000 00000000 00001011                   

   //(1<<2)  

00000000 00000000 00000000 00000001 ->00000000 00000000 00000000 00000100

    b=b|(1<<2);    //00000000 00000000 00000000 00001111

    printf("%d\n",b);//15

              //~(1<<2)11111111 11111111 11111111 11111011

    b=b&(~(1<<2));   //00000000 00000000 00000000 00001011

    printf("%d\n",b);//11

    return 0;

}

  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值