CppPrimer--算术运算符

CppPrimer–算术运算符

Tags :Cpp


算术运算符的运算对象和求值结果都是右值,
在表达式求值前,小整数类型的运算类型会被提升成较大的整数类型,所有运算对象最终会转成同一类型

一元正/负号运算符(+,-)

一元 正/负 号运算符 返回 运算对象值(提升后)副本
需要注意的是bool

bool x = true;
bool y = -x; // y 是true! x被提升为整数1后取负为-1,然后转回布尔值为true(只有0转为false)

乘,除,求余

除:C++11 规定一律向0取整,即直接切掉小数部分
求余:m%n 要求m,n均为整数且n不为0。当m%n != 0 则 结果与m同号

逻辑运算符

与,或 运算符

注意这两个运算符存在求值顺序

非 运算符

关系运算符

相等性测试与布尔字面值

除非清楚比较对象是布尔类型,否则博使用布尔字面值true 和 false作为运算对象

赋值运算符

赋值运算符左侧必须为 可修改的左值 如:

int i = 0, j = 0, k = 0;
const int ci = i;
//以下语句均非法
1024 = k; //1024为右值
i+j = k; //i+j返回右值
ci = k; //ci不可修改

赋值运算结果是它的左侧运算对象,并且是一个左值。
结果的类型就为左侧运算对象的类型 如

int k =0;
k = 3.14;//结果是int, 值是3

利用初始化列时禁止 收缩转换

int k = {3.14}; //error: 首先要丢去小数点,而且int也不足够大容纳整数部分。因而禁止
int a(3.14);    //warning: 只是丢失数据

赋值运算满足右结合律

int i;
double j;
j = i = 3.5; // i = 3 j = 3;

复合赋值运算符较之其等价形式少求一次值。

递增与递减运算符

前置版本: 将运算对象增1后,将改变后的对象作为求值结果,即将对象本身作为左值返回。
后置版本: 将运算对象增1后,求值的结果是运算对象改变之前那个值的副本,
将对象原始值的副本作为右值返回。因而一般不会使用。
均需作用于左值运算对象。

成员访问运算符

注意解引用优先级比 . 运算符要小,注意使用括号。

string s1 = "a string", *p = &s1;
auto size = (*p).size();

条件运算符

形式: cond ? expr1 : expr2;
这是具有求值顺序的运算符
一般形式与嵌套形式

string finalgrade = (grade < 60) ? "fail" : "pass";
finalgrade = (grade > 90) ? "high pass" : (grade < 60) ? "fail" : "pass";

条件运算符优先级较小,使用时注意使用括号

    int grade = 59;
    string s;
    cout << endl;
    cout << s << endl;
    cout << ((grade < 60) ? "fail" : "pass"); //prints  fail;
    s = cout << (grade < 60) ? "fail" : "pass"; //print 1; and assign "fail" to s
    cout << grade < 60 ? "fail" : "pass"; //error:compares cout to 60 

位操作符

用作整数类型处理,就是当做二进制数了操作其位数。这在 《深入理解计算机系统》Chapter2有详细讲解。

sizeof运算符

sizeof 返回 一条表达式或者一个类型名字所占的字节数 为size_t的常量表达式。
满足右结合律。

逗号运算符

含有两个运算对象,从左到右依次求值(具有求值顺序)
先对左侧求值,然后结果丢弃,再对右侧求值,返回右侧的结果

    int x = 1;
    int y = 2;
    int z = 0;
    z = (x++, ++y);
    cout << z << endl;//z = 3;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值