操作符详解

一.位操作符

&(按位与)

| (按位或)

^(按位异或)

~(按位取反)

//这里的位指的是二进制位

用法:

&        //对应的二进制位有0,则为0;全1,才为1。

|         //对应的二进制位有1,则为1;全0,才为0。

^        //对应的二进制位相同为0;相异为1。

~        //对应的二进制位进行取反(原来是1变为0,反之变为1)

#include <stdio.h>

int main()
{
    int a = 3;
    int b = 5;
    int ret = 0;

    ret = a & b;
    ret = a | b;
    ret = a ^ b;
    ret = ~b;
    return 0;
}

如上所示,我们可以写出3和5的二进制形式(32位)来进行分析。

3: 00000000 00000000 00000000 00000011

5: 00000000 00000000 00000000 00000101

如果将3和5进行按位与(&)的操作,3的最后3位是        011

                                                         5的最后3位是        101

根据有0,则为0;全1,才为1;则结果为                        001

最后结果为:00000000 00000000 00000000 00000001

如果将3和5进行按位或(|)的操作,3的最后3位是        011

                                                        5的最后3位是        101

根据有1,则为1;全0,才为0;则结果为                       111

最后结果为:00000000 00000000 00000000 00000111

如果将3和5进行按位异或(^)的操作,3的最后3位是         011

                                                             5的最后3位是        101

根据相同为0;相异为1;则结果为                                       110

最后结果为:00000000 00000000 00000000 00000110

如果将3和5进行按位取反(~)的操作,

假设对5进行操作,(原来是1变为0,反之变为1)

00000000 00000000 00000000 00000101

11111111 11111111 11111111 11111010       

//注意,这里变形后是补码,还要转换成源码当的形式才能打印

11111111 11111111 11111111 11111001            //反码

10000000 00000000 00000000 00000110        //原码

转化位十进制后是           - 6

二.算数操作符

想必大家对 + - * / 都非常熟悉,我也只需要讲一讲 /  % 的用发。

/ (除法);%(取模),它俩应当在一起比较

#include <stdio.h>

int main()
{
    int a = 5;
    int b = 3;
    int ret = 0;
    int sz = 0;
    ret = a / b;
    sz = a % b;
    printf("%d %d",ret,sz);
    return 0;
}
 

因为上述代代码中的变量都是int型,%d打印出的都是十进制整数,

所以ret = 1,

%(就是取出计算后的余数),sz = 2

三.移位操作符

<<         左移操作符                  例:     int a = 5;    int b = a<<2;

>>         右移操作符                           //把a在内存中存储的二进制位(补码)向左移两位

                                                         //最后转化位原码返回

值得注意的是对于右移操作符而言,实际上有两种运算方式:

1.算数右移(右边丢弃,左边补原来的符号位)

2.逻辑右移(右边丢弃,左边补0)

// 一般都是算数右移,但其实是取决于编译器的

四.复合赋值符

+=    -=    /=    %=    &=    |=    ^=    >>=    ...

诸如此类,都是类似与   a + = 10   -->      a = a +10      

五.单目操作符

a++        与        ++a  的区别就是前者是先使用,再加一;后者是先加一,再使用。

 对于sizeof的用法请看如下链接

写文章-CSDN博客https://mp.csdn.net/mp_blog/creation/editor/122213218

 !     叫做逻辑反操作

#include <stdio.h>

int main()
{
    //C语言中0表示假,非0表示真
    int a = 0;
    printf("%d",!a);
    return 0;
}

打印的结果为1(所有非0的数都会打印0)

六.逻辑操作符

&& (逻辑与)       和         ||(逻辑或)     都是逻辑操作符

例如在for( ; a > 0 && b > 0 ; )                //有一个错误则跳出循环

          for( ; a > 0  ||   b > 0 ; )                //全部错误才跳出循环

七.条件操作符

exp1?exp2:exp3                //实际上是简化if语句

MAX = (a > b ? a : b)

//若a > b,则将a的值赋给MAX,若不是,则将b的值赋给MAX

八.逗号表达式

(exp1,exp2,exp3,.....)

//从左向右一次计算,取最后的一个值为最终结果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值