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

版权声明

作者:重庆大学 陈波

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

2.3 整数类型及其字面量(第2部分)

⛵ 知所以然

  为了照顾人类的习惯,前述程序中的数值字面量都是十进制的。事实上,仓颉还允许以二进制、八进制、十六进制形式书写字面量,请见下述程序。

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

main(): Int64 {
var a:UInt8 = 0b00011111 //二进制字面量
var b:UInt16 = 0o37 //八进制字面量
let c:UInt32 = 0x1F //十六进制字面量
//c = c + 1 常量不可以修改
print("a = ${a}, b = ${b}, c = ${c}")
return 0
}

上述程序的执行结果为:

1
a = 31, b = 31,  c = 31

▶第5行:二进制字面量以0b(数字0,字母b)或者0B开头,字母b源自英文单词binary。本行中的字面量0b00011111如果换算成十进制,其值为31。

▶第6行:八进制字面量以0o(数字0,字母o)或者0O开头,字母o源自英文单词octal。本行中的字面量0o37换算成十进制,其值亦为31。

▶第7行:十六进制字面量以0x(数字0,字母x)或者0X开头,字母x源自英文单词hexadecimal中的x。对于本行内字面量0x1F,1在“十”位,位值为1,位权为16,F在“个”位,位值为15,位权为1。将各位位值乘以位权并求和,可知0x1F也等于十进制的31。

▶第8行:与前述变量a,b不同,第7行的对象c通过let关键字定义,它是一个常量(constant)而不是变量。在首次初始化赋值之后,常量不可以修改。因此,本行代码是非法的,只能注释起来。图2-7以常量c为例,说明了定义并初始化一个常量的通用语法。

image-20241129173214645

图2-7 常量c的定义

▶第9行:使用字符串插值输出变量a、b以及常量c的值,从执行结果可见,虽然程序以不同的进制提供了各对象的初始值,但它们事实上都等于十进制的31。

🌌 见微知著

  计算机里的一切都是以二进制为基础的,上述程序中的二进制、八进制、十六进制表达都可以理解为计算机给“愚蠢”人类提供的接口。上述字面量0b00011111、0o37、0x1F在计算机内,都会转换成二进制形式进行存储和计算,只是在输出执行结果给人类阅读前,再行转换成人类熟悉的十进制形式(程序第9行)。

🚠 物见其然

  24等于16,这意味着十六进制的每1位可对应4个二进制位,详情请见表2-2。电气、通信、自动化工程师可以非常方便地通过“口算”在二进制和十六进制之间进行转换。对于人类工程师而言, 0x3F17相较于0b0011 1111 0001 0111,更容易理解、记忆和书写。

表2-2 二进制、十六进制对照表
数值 16进制 2进制 数值 16进制 2进制 数值 16进制 2进制
0 0 0000 6 6 0110 12 C 1100
1 1 0001 7 7 0111 13 D 1101
2 2 0010 8 8 1000 14 E 1110
3 3 0011 9 9 1001 15 F 1111
4 4 0100 10 A 1010
5 5 0101 11 B 1011

  同样地,23等于8,八进制的每1位可对应3个二进制位。

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


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

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

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