运算符优先级
Precedence of operators(运算符优先级)
Operator(运算符)Precedence(优先级)Category(类别)
Not,@Highest(first)Unary operators(单目运算符)
*/div mod and shl shr Second Multiplying operators(乘除运算符)
+-or xor Third Adding operators(加减运算符)
<<><><=>=in Lowest(Last)relational operators(关系运算符)
@取变量或函数的地址(返回一个指针)
当然,如果有括号的话,括号的优先级必然是最大的,说一句题外话,在变成的时候要注意的一点是:0,编译器会根据最优化原则来决定哪一个运算先进行。比如,下面这个运算:
a:=g(3)+f(2);
f(2)有可能在g(3)之前执行,这和Turbo Pascal是不一样的。
如果必须保证g(3)在f(2)之前执行,只能通过临时变量人工的把表达式分隔开来,写成:
e1:=g(3);
a:=e1+f(2);
算数运算符
算数运算符里面值得注意的是:Mod和Div。
引用官方文档中的一句话:
The sign of the result of a Mod operator is the same as the sign of the left side operand of the Mod operator.In fact,the Mod operator is equivalent to the following operation:
I mod J=I-(I div J)*J
But it executes faster than the right hand side expression.
大概的意思就是I mod J的操作等价于I-(I div J)*J,但是它比直接计算更快一些。
所以,就知道一个负数模任何一个数的结果总是负数,一个正数模一个数的结果总是正数,一句话来说就是,模运算的符号取决于第一个操作数,而Div运算的符号则与除法相同是同正异负的。
逻辑运算符
逻辑运算符应该算是最头疼的了,Free Pasca当中的逻辑运算符共有6种:Operator(运算符)Operation(操作)
not Bitwise negation(unary)(按位去反)
and Bitwise and(按位与)
or Bitwise or(按位或)
xor Bitwise xor(按位异或)
shl Bitwise shift to the left(按位左移)
shr Bitwise shift to the right(按位右移)
为了理解这些运算给出前4个运算的真值表:
not
T F
F T
and T F
T T F
F F F
or T F
T T T
F T F
xor T F
T F T
F T F
在操作中,这些操作的操作数都是要先转化成二进制然后再进行运算的,那知道这些可能还不够,比如我们要计算(-2)and7这个结果是多少呢?
在FP里面运行一下,记过马上出来了(-2)and7=6。
那为什么呢?这要从计算机表示负数的方法来说,假设有一个longint类型的整数,值为5,那么,我们知道它在计算机中表示为:00000000000000000000000000000101
5转换成二制是101,不过longint类型的数占用4字节(32位),所以前面填了一堆0。现在想知道,-5在计算机中如何表示?
在计算机中,负数以其正值的补码形式表达。
什么叫补码呢?这得从原码,反码说起。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
比如00000000000000000000000000000101是5的原码。
10000000000000000000000000000101是-5的原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
取反操作指:原为1,得0;原为0,得1。(1变0;0变1)
比如:将10000000000000000000000000000101每一位取反(保留最高位符号位的值)11111111111111111111111111111010。
那么11111111111111111111111111111010就是10000000000000000000000 00000101的反码。
补码:反码加1称为补码。运算符优先级图片
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
比如:10000000000000000000000000000101的反码是:1111111111111111 1111111111111010。
那么,补码为:
11111111111111111111111111111010+1=111111111111111111111111
11111011
所以,-5在计算机中表达为:11111111111111111111111111111011。
以上面一个表达式:-2and7,我们来看整数-2在计算机中如何表示。
假设这也是一个longint类型,那么:
1、先取-2的原码:10000000000000000000000000000010
2、得反码:11111111111111111111111111111101
3、得补码:11111111111111111111111111111110
通过以上的方法,-2and7用下面的方法运算11111111111111111111111111111110
and00000000000000000000000000000111
=00000000000000000000000000000110
所以,得出的结果自然就是6了。
Pascal的多种退出语句用法
break是用来退出其所在的循环语句
即:不论在任何一个循环语句中执行了break的话,马上退出这个语句。
例如:var i:integer;
begin
for i:=1to10do
begin
{1}writeln(i);
break;
writeln(i+1);
end;
readln
end.
执行结果:
1可见第一次循环时,执行了{1}句后,执行break,然后马上退出了这个for语句。{*****}注意:以上两个语句只对它们所在的那层循环语句起作用,
也就是说:如果有多个循环语句相嵌套,其中某一层执行了continue/break 语句,它们并不能影响上面几层的循环语句。
exit是退出当前程序块;
即:在任何子程序中执行exit,那么将退出这个子程序;
如果是在主程序中执行exit,那么将退出整个程序。
{******}注意:类似上面的,exit也是只对当前这一个子程序产生作用,
如果多重嵌套子程序,那么其中某个子程序执行了exit以后,将返回到调用它的那个语句的下一个语句。
halt:没什么好说的,退出整个程序,Game Over.
例如:搜索时,一旦到一个解,就打印,然后执行halt,退出整个程序。
inc(a,n)就是a:=a+n;
dec(a,n)就是a:=a-n;
inc(a)就是a:=a+1;
dec(a)就是a:=a-1;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。