C++初学(5)

5.1、C++算数运算符

C++有这几种运算符:加、减、乘、除以及求模。每种运算符都使用两种值(操作数)来计算结果。

+运算符、-运算符、*运算符用法和平时一致。而/运算符作除法运算时结果为商的整数部分,例如:17/3=5,丢弃小数部分;%运算符求模生成第一个除以第二个数的余数。例如:19%6为1,因为19是6的3倍余1。注:两个操作数必须是整数,不能用于浮点数。

5.1.1、运算符优先级和结合性

当多个运算符可用于同一个操作数时,C++遵循通常的代数优先级,先乘除,后加减。也可以使用括号来执行自己的优先级。

当两个运算符的优先级相同时,C++将从左到右结合,先使用左端的运算符。

5.1.2、除法分支

#include <iostream>
int main()
{
	using namespace std;
	cout.setf(ios_base::fixed, ios_base::floatfield);
	cout << "Integer division: 9/5= " << 9 / 5 << endl;
	cout << "Floating_point division:9.0/5.0= ";
	cout << 9.0 / 5.0 << endl;
	cout << "Mixed devision: 9.0/5= " << 9.0 / 5 << endl;
	cout << "double constants:1e7/9.0= ";
	cout << 1e7 / 9.0 << endl;
	cout << "float constants:1e7f/9.0f= ";
	cout << 1e7f / 9.0f << endl;
	return 0;
}

从第一行可知,整数9除以5的结果为1,0.8部分被丢弃。当至少有一个操作数是浮点数时,结果为1.8。如果两个操作数都是同一类型,则会自动转换。注:浮点常量默认情况下为double类型。

5.1.3、求模运算符

下面给一个程序:

#include <iostream>
int main()
{
	using namespace std;
	const int Lbs_per_stn = 14;
	int lbs;

	cout << "Enter your weight in pounds: ";
	cin >> lbs;
	int stone = lbs / Lbs_per_stn;
	int pounds = lbs % Lbs_per_stn;
	cout << lbs << "pounds are " << stone << " stone, " << pounds << "pound(s).\n";
	return 0;
}

两个操作数都是int,所以计算机执行整数除法。lbs的值为181,所以表达式的值为12。

5.1.4、类型转换

由于有11种整型和3种浮点类型,因此C++自动执行很多类型转换:

(1)将一种算术类型的值赋给另一种算术运算符;

(2)表达式包含不同类型时;

(3)将参数传递给函数时。

5.1.4.1、初始化和赋值进行的转换

C++允许将一种类型的值赋给另一种类型的变量。例如将short类型的转换为long类型。

将一个值赋给取值范围更大的类型通常不会导致什么问题,只是占用的字节更多而已。但是将很大的long值赋给float变量则会降低精度。由于float只有6位有效数字,如2111222333将会四舍五入为2.11122E9。下面是可能会出现的问题。

5.1.4.2、以{}方式初始化时的转化

它对类型转换要求更严格,列表初始化不允许缩窄,即变量的类型可能无法表示赋给它的值。

5.1.4.3、表达式中的转化

当运算涉及两种类型时,较小的类型将被转换为较大的类型。

5.1.4.4、强制类型转换

C++还允许通过强制类型转换机制显示地进行类型转换。强制转换类型有两种。例如,为将存储在yuanshi中的int值转换为long类型,可以用下列表达式的一种:

(long) yuanshi
long (yuanshi)

强制类型转换不会修改yuanshi变量本身,而是创建一个新的。指定类型的值。

第一种格式来自C语言,第二种格式时纯粹的C++。新格式的想法是,要让强制类型转换就像是函数调用。

C++还引入了4个强制类型转换运算符,对它们的使用要求更加严格,如static_cast<>。

stastic_cast<typeName>(value)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值