c语言操作符

本文详细介绍了算术、移位及位操作符在编程中的应用,包括加减乘除、取余、左移和右移,以及按位与、或、异或等操作。同时涵盖了单目操作符如逻辑非和sizeof,以及逗号表达式的概念和实例。适合初学者理解基本的计算机底层操作。

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

   

目录

1.算术操作符

2.移位操作符

3.位操作符

4.单目操作符

         5.逗号表达式


1.算术操作符

算术操作符是我们最常用的操作符:+    -   *   /   %

  • 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
  • 对于 / 操作符如果两个操作数都为整数,执行整数除法,而只要有浮点数执行的就是浮点数除法。
  • % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

2.移位操作符

 移位操作符分为左移操作符和右移操作符,移位操作符的操作对象只能是整数,且所谓的移位是对于整数的二进制位进行移位:
左移操作符:<<(左边丢弃,右边补0)
右移操作符:>>

算术右移:右边丢弃,左边补符号位

逻辑右移:右边丢弃,左边补0(具体是算术右移还是逻辑右移是取决于编译器)

Visual Studio 的右移是算术右移

例如:

其中 i = 6

二进制数0000 0000 0000 0000 0000 0000 0000 0110(一个字节占32个bite位)正数原码,反码补码相同)由于 << (左移位操作符)的影响,

j = i << 1 

二进制变为 0000 0000 0000 0000 0000 0000 0000 1100 ,j  的值就变为了12;

其中 i  =  - 6二进制数

原码为: 1000 0000 0000 0000 0000 0000 0000 0110

反码为: 1111  1111  1111  1111  1111 1111  1111  1001

补码为: 1111  1111  1111  1111  1111 1111  1111  1010

由于 >> (右移位操作符)的影响,

j = i >> 1 二进制

补码:1111  1111  1111  1111 1111 1111  1111  1101

反码:1111  1111  1111  1111 1111 1111  1111  1100

原码:1000 0000 0000 0000 0000 0000 0000 0011

j = -3。

注意:对于位移操作符没有移动负位的说法,

例如:int  num = 5;

num << -1   //error

3.位操作符

位操作符分为:

&  :  按(二进制)位与        (对应的二进制位,只有2个都为1,最终才为1)                 

|   :按(二进制)位或        (对应的二进制位,只要有一个为1,最终也为1)   

^  :  按(二进制)位异或     (对应的二进制位,相同为0,相异为1)                 

注:它们的操作数是整数

    

 其中 -5的补码为 :  1111 1111 1111 1111  1111  1111  1111   1011

          6的补码为:    0000 0000 0000 0000 0000 0000 0000  0110

             c = a&b 为: 0000  0000 0000 0000 0000 0000 0000  0010

     所以c的原码也为0000 0000 0000 0000 0000 0000 0000 0010    c = 2;

              m =a | b为: 1111 1111 1111 1111   1111  1111  1111 1111

       所以m的原码为:1000 0000 0000 0000 0000 0000 0000 0001     m = -1;

 

            n = a ^ b为:  1111   1111   1111  1111   1111   1111   1111  1101

   所以n的原码为: 1000 0000 0000 0000 0000 0000 0000 0011  n = - 3

 

4.单目操作符

             

   对于 !操作符  :      

             !(0)返回1;

             !(非0)返回0.

   对于 sizeof

       sizeof(数组名)—— 数组名表示整个数组,计算的是整个数组的长度,单位是字节 

注: sizeof  中的表达式不参与计算

   

   在本代码中:sizeof 中的  b =  a  +  12并没有去影响实际的 b 的值,

   说明sizeof中的表达式是不参与运算的。

    ~   操作符:

              将二进制数按位取反,如:

                      0000   0000  0000  0000  0000  0000  1100   0011

按位取反后:1111   1111   1111  1111   1111  1111    0011   1100

5.逗号表达式

 逗号表达式,就是用逗号隔开多个表达式,如:

       int  a  =  3,  b = 5;

       int  c = (a > b, a = b + 5, a , b = a - 1 );   //逗号表达式

  逗号表达式,从左往右依次计算,整个表达式的结果是最后一个表达式的结果

  这个代码最终的  c  的值为  9;

 

     

    

        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值