作为新生的,不用背负任何历史包袱的全新语言,仓颉充分吸收了过去数十年来众多编程语言之长,原生智能化、天生全场景、高性能、强安全。作为华为鸿蒙系统的平台语言,仓颉拥有良好的发展潜力和前景,极有可能成为第一款形成世界级影响的国产编程语言。青少年现在学习仓颉,就是在投资未来 !

版权声明

作者:重庆大学 陈波

本文可以在互联网上自由转载,但必须注明出处(作者:海洋饼干叔叔)并包含指向本页面的链接。本文不可以以纸质出版为目的进行改编、摘抄。

2.5 数值计算

2.5.1 自增、自减、求余

  除了已经讨论过的加减乘除四则运算,整数类型还支持自增、自减和求余操作。请见下述示例:

1
2
3
4
5
6
7
8
9
10
11
12
//Project - Computation1
package Computation1

main(): Int64 {
var i:Int32 = 100; var j:Int32 = 100
i++; j-- //i自增1, j自减1
println("i = ${i}, j = ${j}")

let r = j % 10 //求j除以10的余数
print("${j} % 10 = ${r}")
return 0
}

上述程序的执行结果为:

1
2
i = 101, j = 99
99 % 10 = 9

▶第5行:定义两个Int32类型的整数对象i和j,均初始化为100。借助于分号,可以在同一行代码中书写多条仓颉语句。本行代码事实上等价于:

1
2
var i:Int32 = 100
var j:Int32 = 100

  为节省篇幅,保护地球母亲,本书的后半部分常常会用分号在一行中书写多条语句。但在实践中,为了保持代码格式的整洁易读,不建议这么做。

▶第6行:i++将i自增1,等价于i = i + 1,该行代码执行后,i的值增加了1。j—将j自减1,等价于j = j – 1,该行代码执行后,j的值减少了1。执行结果的第1行证实了上述结论。类似地,i++和j–是两条各自独立的仓颉语句,通过使用分号,两条语句被写在了同一行。

▶第9行:j % 10用于求j除以10的余数,执行结果的第2行可见,99除以10的余数为9。本行中,求余结果被赋值给了常量r。如前所述,变量定义以var关键字开头,常量定义则以let关键字开头。本行未指定常量r的数据类型,仓颉编译器通过“推断”来确定其类型。由于j是Int32,字面量10也可被视为Int32,r的类型自然与j % 10的结果类型等同,即Int32。

  浮点数类型不支持自增、自减及求余操作符。

2.5.2 复合操作符

  a = a + b可以被简写为a += b。这里的操作符“+=”代表了两个操作,首先将a和b相加,再将和赋值给a,故称其为复合操作符。类似地,a -= b等价于a = a – b; a *= b等价于a = a * b;a /= b等价于a = a / b;a %= b则等价于a = a % b。

1
2
3
4
5
6
7
8
9
10
11
12
13
//Project - Compound
package Compound

main(): Int64 {
var f:Float32 = 13.14
f *= 2.0; f += 1.0; f /= 2.0; f -= 0.5
println("f = ${f}")

var i:Int64 = 1520
i %= 1000
print("i = ${i}")
return 0
}

上述程序的执行结果为:

1
2
f = 13.140000
i = 520

▶第9行:f *= 2.0等价于f = f * 2.0,该语句执行后f的值为26.28;f += 1.0执行后f变为27.28;f /= 2.0执行后f变为13.64;f -= 0.5执行后f变为13.14。请注意f *= 2.0不可以写成f *= 2,因为仓颉只允许相同类型的数值对象之间的运算,Float32类型的f与整数类型的2不可以直接相乘。

▶第10行:i %= 1000等价于i = i % 1000,如执行结果的第2行所见,结果为520。

2.5.3操作符优先级

  当同一个计算表达式中包含多个运算符时,仓颉按照先乘除、后加减,加括号的优先算的规则来确定计算顺序。请见下述示例。

1
2
3
4
5
6
7
8
9
10
//Project - Priority
package Priority

main(): Int64 {
let a = 3 + 2 * 6 / 3
let b = (3+2) * 6 / 3
let c = ((b-a) + 7)*51 + 10
print("a = ${a}, b = ${b}, c = ${c}")
return 0
}

上述程序的执行结果为:

1
a = 7, b = 10, c = 520

▶第5行:*号、/号的优先级比+号高;本行代码先计算2*6得12,然后12/3得4,最后3+4得7,再赋值给常量a。再次强调,整数除以整数的结果仍为整数。

▶第6行:3+2加了括号,最先计算得5,然后5*6得30,最后30/3得10。

▶第7行:b–a位于最内层的括号内,最先计算得3,3+7在外层括号内,次优先计算得10,然后10*51得510,510+10得520。

🚸 注意——

  [(b - a) + 7] * 51 + 10是一个合法的数学表达式,但在仓颉中却是非法的。无论在计算表达式中嵌套多少层括号,仓颉总是使用( )。[ ]在仓颉中另有他用。

海洋饼干叔叔的仓颉语言学习笔记将持续更新… 敬请期待。


欢迎支持海洋饼干叔叔系列程序设计教材,案例、配套资源丰富,实践性强,高等教育出版社出版。

高校教学同行如果需要样书,或者索取教学支持资源, 请联系公众号或者海洋饼干叔叔本人。

《Python编程基础及应用》 《Python编程基础及应用实验教程》 《C++编程基础及应用》
book1 实验书图片 Cpp小尺寸