C语言操作符(又称运算符)(1)

2018-01-17   创建人:Ruo_Xiao
开发环境:VS2010
邮箱:xclsoftware@163.com

一、分类

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

二、算术操作符

+ - * / %

  1. 除了%外其余均适用于浮点型和整型。
  2. /:当两边都是整数时,结果是商,其他情况执行浮点数除法。
  3. %:两边只能是整数,结果是余数。
    栗子:
int i = 4.0%3;  //error C2296: “%”: 非法,左操作数包含“double”类型
int k = 4%3;    //正确

三、移位操作符

<<   >>

1、<<:在左移位中,值的最左边的几位被丢弃,右边多出来的几个空位则由0补齐。
2、>>:在右移位中,值的最右边的几位被丢弃,左边多出来的几个空位有如下
两种情况:
(1)逻辑移位:左边移入的位由0填充。
(2)算术移位:左边移入的位由原来符号位决定,若为1,则全部填充1,若为0,则全部填充0。
具体采取上述哪种情况,由编译器决定。
栗子:

#include "stdafx.h"
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    int i1 = -123;
    int i2 = i1>>3;

    int i3 = 123;
    int i4 = i3>>3;

    cout<<"i1 = "<<i1<<endl;
    cout<<"i2 = "<<i2<<endl;
    cout<<endl;
    cout<<"i3 = "<<i3<<endl;
    cout<<"i4 = "<<i4<<endl;
    cin.get();

    return 0;
}

结果如下:
这里写图片描述
解释:
(1)补码计算过程:
-123:1111 1011 -> 1000 0100 -> 1000 0101。
123:0111 1011 -> 0111 1011 -> 0111 1011
(2)右移三位,两种结果,如下:
-123:
A、逻辑移位:0001 0000。
B、算术移位:1111 0000。
123:
A、逻辑移位:0000 1111。
B、算术移位:0000 1111。
(3)上述结果在计算机中都是补码,那么其原码对应的十进制是什么呢?计算如下:
-123:
A、0001 0000 -> 0001 0000 -> 0001 0000 -> 16。
B、1111 0000 -> 1110 1111 -> 1001 0000 -> -16。
123:
A、0000 1111 -> 0000 1111 -> 0000 1111 -> 15。
B、0000 1111 -> 0000 1111 -> 0000 1111 -> 15。
答案揭晓:对于VS2010,数值右移,在左边,是按照符号位进行填充的,即:算术移位。

四、位操作符

& -> AND
| -> OR
^ -> XOR(异或,相同为0,不相同为1

五、赋值

=   结合性从右向左

复合赋值符:+= -= <<= 等。
这里需要注意:

a = a + 1;
a += 1;

上述两个表达式结果都是一样的,但是更推荐后者,原因如下:

b*(a+3) = b*(a+3) + 10;
b*(a+3) += 10;

大家明白了吧,有上述栗子可知,复合赋值比普通赋值的优点如下:
(1)增强源码的可读性和易维护性。
(2)后者表达式b*(a+3)只计算1次,前者计算2次,提高代码执行效率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值