C语言操作符讲解

对于刚接触C语言的人来说,一提到操作符,可能也只有==、+、-、*等等。今天就来了解一下操作符的知识。

操作符包括算术操作符、移位操作符、位操作符、赋值、单目操作符。关系操作符、逻辑操作符、条件操作符。逗号操作符。

算术操作符有:加(+)、减(-)、乘(*)、除(/)、取模(%)。

在这些操作符中,需要注意的是除(/)和取模(%)的使用:

1、 浮点数相除是浮点数,整数相除是整数,浮点数除以整数为浮点数。

2、 取模(%)两边都应为整数。

移位操作符有:左移(<<)和右移(>>)。

在说这些之前,我们应该了解什么是源码、反码和补码。

电脑一般都是32位的,则在编程软件中,数字的二进制也是32位。正数在电脑中以源码保存,负数在电脑中以补码保存。正数的源码最高位是0,负数的源码最高位是1。正数的源码、反码、补码都相同。负数的反码是在符号位不变的基础上,其他位取反。其补码为反码+1。

例如:1源码为0000 0000 0000 0000 0000 0000 0000 0001

      1反码为0000 00000000 0000 0000 0000 0000 0001

      1补码为0000 00000000 0000 0000 0000 0000 0001

 

     -1源码为1000 00000000 0000 0000 0000 0000 0001

     -1反码为1111 11111111 1111 1111 1111 1111 1110

     -1补码是1111 11111111 1111 1111 1111 1111 1111

接下来再说左移(<<),末位补0,最高位溢出。

例如:a=1,a<<2

        a:00000000 0000 0000 0000 0000 0000 000100

              溢出                                                        补0

              则a<<2:0000 0000 0000 0000 0000 0000 0000 0100

int main()

{

  int a = 1;

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

  a = a << 2;

  printf("a<<2=%d\n",a);

  system("pause");

  return 0;

}

            

右移(>>)分为逻辑右移和算术右移。逻辑右移是左边补0,右边舍弃。算术右移是最高位补符号位,右边舍弃。经常使用的是算术右移。

例如:a=1,a>>2

        a: 000000 0000 0000 0000 0000 0000 0000 0001

        补符号位                                                      舍弃

               a<<2: 0000 0000 0000 0000 0000 0000 0000 0000

     int main()

{

  int a = 1;

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

  a = a >> 2;

  printf("a>>2=%d\n",a);

  system("pause");

  return 0;

}

位操作符有三种,分别是:与(&)、或(|),异或(^)的原则进行计算。

与(&)就是两个数的补码,每位进行比较,按照有0则为0,同为1则是1的原则进行计算。

异或(^)就是两个数的补码,每位进行比较,按照相同为0,不同为1的原则进行计算。

先看下面这段例程

int main()

{

    int a = 3;

    int b = 5;

    printf("a&b=%d\n",a&b);

    printf("a|b=%d\n",a|b);

    printf("a^b=%d\n",a^b);

    system("pause");

    return 0;

}

a的补码是:0000 0000 0000 00000000 0000 0000 0011

b的补码是:0000 0000 0000 0000 0000 0000 0000 0101

    a&b=0000 0000 0000 0000 0000 0000 00000001=1

      a|b=0000 0000 0000 0000 0000 0000 0000 0111=7

      a^b=0000 0000 0000 0000 0000 0000 0000 0110=6

赋值中包括就是我们常见的=,还包括复合赋值操作符有+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。

a+=2表示a=a+2,即操作符两边的数先进行计算再将计算结果赋值到操作数。

关系操作符有!=、<=、>=、==、<、>

单目操作符有!、-、+、&、sizeof、~、++、--、*。

!表示非,例如!(2=2),2=2为真,则!(2=2)为假。

-表示操作数的负值,-1也就是我们所说的负数。

+表示操作数的正值,一般被省略。

&表示操作数的地址,例如:

int a = 10;

int* b = &a;

sizeof用于计算该操作数或表达式的字节数,初学者会认为这是一个函数,这是一个误区。

~用于整型求补操作,即将该操作数的二进制进行转换,1变为0,0变为1。

++用于操作数的自加,每次加1,++a表示先自加在使用该操作数,a++表示先使用该操作数再进行自加。

*表示间接访问操作符,在指针中使用。*a表示访问a指向的内容。

逻辑操作符有&&和||,在这里需要注意的是要和位操作符进行区分,&&表示和,即所有条件为真且为真,一个条件为假就是假,||表示或,即一个为真即为真,全部为假才是假。

条件操作符包括三个部分:a?b : c

a为一个判断条件,若a为真则执行b语句,若a为假则执行c语句。

逗号操作符使用很频繁,逗号操作符把多个表达式分隔开,表达式从左往右依次计算。

可能关于操作符的叙述不是很详细,欢迎交流!

                           

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值