【Delphi奥法 - 第二章】Pascal基本语法
delphi吧
全部回复
仅看楼主
level 11
天道玄虚 楼主
2.0、运算符和表达式
运算符和表达式是Pascal语句的基本构成之一,其中运算符包括算术运算符、逻辑运算符、位运算符以及指针运算符,表达式依照结果的数据类型区分。
2.0.0、算术运算符
Delphi中提供加减乘除四则运算符,其中除法分为整数型除法(结果取截断整数)以及实数型除法,其中整数型除法使用“div”,实数型除法使用“/”。乘法使用符号“*”。比如:
a := 5 / 2; // 结果为2.5,类型为实数。
b := 5 div 2; //结果为2,类型为整数。
c := 3 * 2.5; //结果为7.5,类型为实数。
另外,Delphi还提供计算余数的运算符“mod”,计算结果为整数类型,比如:
d := 5 mod 2; //结果为1,类型为整数。
Delphi不提供乘方开放运算符,需要使用函数完成。
另外,有时候减号可以作为负号使用,当作为负号使用的时候,负号前不能够有其他数比如:
a := -2; // 如果负号前有其他数,那么作为减号使用。
b := 3 * -2; // 也可以在其他的运算符之后使用,负号将会优先被考虑。
2.0.1、逻辑运算符
与运算:当两个相与的表达式均为True时,结果为True,否则为False。符号为“and”。比如:
a := (1
+3
= 4)and (7 div 5 = 1); // 结果为True,类型为布尔型(Boolean)。
或运算:当两个相或的表达式均为False时,结果为False,否则为True。符号为“or”,比如:
b := (7 / 2 =3.5) or (5 + 7 = -2); // 结果为True,类型为布尔型。
非运算:写在逻辑值或表达式之前,当逻辑值为Ture时,结果为False,符号为“not”。比如:
c := not (1 + 3= 4); // 结果为False。
异或运算:当两个相异或的表达式结果不同的时候,异或运算结果为True,否则为False,符号为“xor”。比如:
d := True xorFalse; // 结果为True。
e := False xorFalse; // 结果为False。
f := True xorTrue; // 结果为False。
2.0.2、位运算符
按位左移:按照二进制向左移位,相当于乘以2的次方,但是效率较高。符号为“shl”。比如:
a := 3 shl 4; //结果为48。
按位右移:按照二进制向右移位,相当于整数除以2的次方,但是效率较高。符号为“shr”。比如:
b := 48 shr 2;// 结果为12。
按位与:按照二进制,对每一位进行与操作,将1视为True,0视为False,将结果按二进制输出,符号为“and”。比如:
c := 5 and 4; //结果为4(101 and 100 = 100)。
按位或:按照二进制,对每一位进行或操作,将1视为True,0视为False,将结果按二进制输出,符号为“or”。比如:
d := 5 or 2; // 结果为7(101 or 010 = 111)。
按位取反:按照二进制,对每一位进行非操作,将1视为True,0视为False,将结果按二进制输出,符号为“not”。比如:
e := not 62; // 如果数据类型为Byte,则结果为193(not 00111110 = 11000001)。
按位异或:按照二进制,对每一位进行异或操作,将1视为True,0视为False,将结果按二进制输出,符号为“xor”。比如:
f := 12 xor 21;// 结果为25(01100 xor 10101 = 11001)。
指针运算符将在后续关于指针的章节中讲解。
2.0.3、表达式与运算符优先级
表达式由数据和运算符构成,由于表达式中不只有一个运算符,因此需要考虑运算符优先级的问题。
Delphi中运算符优先级如下:
1.单目运算符 (最高优先级)
@ 取变量或函数的地址(返回一个指针)
not 逻辑取反或按位取反
- 取负数
2.乘除及按位运算符
* 相乘或集合交集
/ 浮点相除
div 整数相除
mod 取模 (整数相除的余数)
as 程序运行阶段类型转换 (RTTI运算符)
and 逻辑或按位求与
shl 按位左移
shr 按位右移
3.加减运算符
+ 相加、集合并集、字符串连接或指针增加一个偏移量
- 相减、集合差集或指针减少一个偏移量
or 逻辑或按位或运算
xor 逻辑或按位异或运算
4.关系及比较运算符(最低优先级)
= 判断是否相等
<> 判断是否不相等
< 判断是否小于
> 判断是否大于
<= 判断是否小于或等于,或是否是一个集合的子集
>= 判断是否大于或等于,或是否是一个集合的父集
in 判断是否是集合成员
is 判断对象是否类型兼容 (又一个RTTI运算符)
2017年01月19日 12点01分 1
level 11
天道玄虚 楼主
2.1、if选择语句
Delphi中使用if……then表示选择,结构如下:
if 逻辑表达式 then
语句1
else
语句2;
当逻辑表达式中条件为真的时候,执行语句1,否则执行语句2。
比如:
if a > b then
max := a
else
max := b;
当然,if语句还可以进行嵌套,嵌套时,需要考虑就近原则,即:else属于最邻近的if,为了避免因此出现错误,请使用begin代码段,比如:
if a > b then
begin
if a > c then
max := a
else
max := c;
end
else
begin
if b > c then
max := b;
else
max := c;
end;
注意,else前的end末尾没有分号。
2.2、case选择语句
如果一个变量可能等于很多个值之一,那么可以考虑使用case语句。结构如下:
case 变量 of
值, 值, ……:
begin
end;
else
end;
比如:
case Kind of
0, 1:
Exit(1);
2, 3, 4:
Exit(2);
5, 6:
Exit(3);
else
Exit(0);
end;
对于需要执行多次的语句,可以选择while、for、repeat三种循环。
2.3、while循环语句
结构:
while 逻辑表达式 do
begin
end;
效果:当逻辑表达式成立的时候,执行之后的语句段。
while循环如果设置不当,很可能产生死循环。
2.4、for循环语句
结构:
for 循环变量 := 初始值 to 终止值 do
begin
end;
此处,循环变量会从初始值依次加一最终到达终止值,如果终止值更小,则不会循环。
或者采用以下结构:
for 循环变量 := 初始值 downto 终止值 do
begin
end;
此处,循环变量会从初始值依次减一最终到达终止值,如果终止值更大,则不会循环。
2.5、repeat循环语句
如果不论条件是否成立,循环体至少需要执行一遍的时候,推荐使用repeat循环,又称直到型循环。结构:
repeat
until 逻辑表达式;
效果:至少执行一次,当条件成立时,循环终止。
2017年01月19日 12点01分 3
level 1
顶。。。。期待后面能多介绍一些新特性 和 新类型
2017年01月19日 12点01分 4
先上基本语法[滑稽]
2017年01月19日 12点01分
level 11
天道玄虚 楼主
2.6、字符串的简单使用
对于一个字符串变量,可以使用中括号进行索引,获得字符,注意第n个字符使用下标n。如下:
s := ‘abcde’;
c := s[1]; // c的值为’a’;
d := s[3]; // d的值为’c’;
还可以使用加号连接字符或者字符串,成为新的字符串,如下:
s := s + c + d;// s的值为’abcdeac’;
如果需要获得字符串的长度,需要使用Length函数,如下:
l := Length(s);// 对于最后的s(值为’abcdeac’),l的值为7。
练习:求和小程序。
在输入框中输入若干个整数,并使用逗号隔开,点击排序按钮完成求和,并在另一个输入框中显示。第二个输入框设置为只读。
思路:
通过一个字符串变量获取输入框中的字符串,之后从1循环至字符串长度,通过识别逗号(需要注意程序中的为英文逗号还是中文逗号)来识别这个数是否结束。
2017年01月19日 12点01分 5
level 11
天道玄虚 楼主
这里是【Delphi奥法】教程的文件存档,包括源代码以及word文档。[无效] http://pan.baidu.com/s/1nv148rB
2017年01月19日 12点01分 6
level 10
支持T<T。[哈哈]
2017年01月20日 02点01分 9
level 7
打卡
2017年03月09日 09点03分 12
level 5
课程纠正,最好多点上机操作。不要上来放理论。很多书的弊端就是上机少而没有真正掌握。开始不要讲理太多语法以外的东西,如第0章IDE介绍过多。对老鸟可能没什么,新鸟不知昨回事。
2019年04月19日 06点04分 13
我已经弃坑了emmm,发的时候没有人反馈,缺陷也多,也比较随意,所以质量不太高很正常吧
2019年04月26日 19点04分
支持再发呀,这么好的事业怎么就弃坑了
2019年05月09日 07点05分
1