范文一:VB运算符优先级
VB运算符优先级
当表达式包含多个运算符时,将按预定顺序计算每一部分,这个顺序被称为运算符优先级。可以使用括号越过这种优先级顺序,强制首先计算表达式的某些部分。运算时,总是先执行括号中的运算符,然后再执行括号外的运算符。但是,在括号中仍遵循标准运算符优先级。
当表达式包含多种运算符时,首先计算算术运算符,然后计算比较运算符,最后计算逻辑运算符。所有比较运算符的优先级相同,即按照从左到右的顺序计算比较运算符。算术运算符和逻辑运算符的优先级如下所示,
算术运算符 比较运算符 逻辑运算符
描述 符号 描述 符号 描述 符号
求幂 ^ 等于 = 逻辑非 Not
负号 - 不等于 <> 逻辑与 And
乘 * 小于 < 逻辑或="" or="">
除 / 大于 > 逻辑异或 Xor
整除 \ 小于等于 <= 逻辑等价="" eqv="">=>
求余 Mod 大于等于 >= 逻辑隐含 Imp
加 + 对象引用比较 Is
减 -
字符串连接 & 当乘号与除号同时出现在一个表达式中时,按从左到右的顺序计算乘、除运算符。同样当加与减同时出现在一个表达式中时,按从左到右的顺序计算加、减运算符。
范文二:运算符优先级
运算符优先级
Precedenceofoperators(运算符优先级)
Operator(运算符)
Not,@
*/divmodandshlshr
+-orxor
=inPrecedence(优先级)Category(类别)Highest(first)SecondThirdLowest(Last)Unaryoperators(单目运算符)Multiplyingoperators(乘除运算符)Addingoperators(加减运算符)relationaloperators(关系运算符)@取变量或函数的地址(返回一个指针)
当然,如果有括号的话,括号的优先级必然是最大的,说一句题外话,在变成的时候要注意的一点是:0,编译器会根据最优化原则来决定哪一个运算先进行。比如,下面这个运算:
a:=g(3)+f(2);
f(2)有可能在g(3)之前执行,这和TurboPascal是不一样的。
如果必须保证g(3)在f(2)之前执行,只能通过临时变量人工的把表达式分隔开来,写成:
e1:=g(3);
a:=e1+f(2);
算数运算符
算数运算符里面值得注意的是:Mod和Div。
引用中的一句话:
ThesignoftheresultofaModoperatoristhesameasthesignoftheleftsideoperandoftheModoperator.Infact,theModoperatorisequivalenttothefollowingoperation:
ImodJ=I-(IdivJ)*J
Butitexecutesfasterthantherighthandsideexpression.
大概的意思就是ImodJ的操作等价于I-(IdivJ)*J,但是它比直接计算更快一些。
所以,就知道一个负数模任何一个数的结果总是负数,一个正数模一个数的结果总是正数,一句话来说就是,模运算的符号取决于第一个操作数,而Div运算的符号则与除法相同是同正异负的。
逻辑运算符
逻辑运算符应该算是最头疼的了,FreePasca当中的逻辑运算符共有6种:Operator(运算符)Operation(操作)
not
and
or
xor
shlBitwisenegation(unary)(按位去反)Bitwiseand(按位与)Bitwiseor(按位或)Bitwisexor(按位异或)Bitwiseshifttotheleft(按位左移)
shr
not
T
F
and
T
F
or
T
F
xor
T
FTTFTTTTFTFTFFFFTFFTFBitwiseshifttotheright(按位右移)为了理解这些运算给出前4个运算的真值表:
在操作中,这些操作的操作数都是要先转化成二进制然后再进行运算的,那知道这些可能还不够,比如我们要计算(-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就是1000000000000000000000000000101的反码。
补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
比如:10000000000000000000000000000101的反码是:11111111111111111111111111111010。
那么,补码为:
11111111111111111111111111111010+1=111111111111111111111111
11111011
所以,-5在计算机中表达为:11111111111111111111111111111011。以上面一个表达式:-2and7,我们来看整数-2在计算机中如何表示。假设这也是一个longint类型,那么:
1、先取-2的原码:10000000000000000000000000000010
2、得反码:11111111111111111111111111111101
3、得补码:11111111111111111111111111111110
通过以上的方法,-2and7用下面的方法运算
11111111111111111111111111111110
and00000000000000000000000000000111
=00000000000000000000000000000110
所以,得出的结果自然就是6了。
Pascal的多种退出语句用法
break是用来退出其所在的循环语句
即:不论在任何一个循环语句中执行了break的话,马上退出这个语句。例如:vari:integer;
begin
fori:=1to10do
begin
{1}writeln(i);
break;
writeln(i+1);
end;
readln
end.
执行结果:
1可见第一次循环时,执行了{1}句后,执行break,然后马上退出了这个for语句。{*****}注意:以上两个语句只对它们所在的那层循环语句起作用,
也就是说:如果有多个循环语句相嵌套,其中某一层执行了continue/break语句,它们并不能影响上面几层的循环语句。
exit是退出当前程序块;
即:在任何子程序中执行exit,那么将退出这个子程序;
如果是在主程序中执行exit,那么将退出整个程序。
{******}注意:类似上面的,exit也是只对当前这一个子程序产生作用,如果多重嵌套子程序,那么其中某个子程序执行了exit以后,将返回到调用它的那个语句的下一个语句。
halt:没什么好说的,退出整个程序,GameOver.
例如:搜索时,一旦找到一个解,就打印,然后执行halt,退出整个程序。inc(a,n)就是a:=a+n;
dec(a,n)就是a:=a-n;
inc(a)就是a:=a+1;
dec(a)就是a:=a-1;
范文三:C++运算符优先级
C++ Operator Precedence
The operators at the top of this list are evaluated first. Operators within a group have the same precedence. All operators have left-to-right associativity unless otherwise noted.
这张表格的头部的运算符是以数字形式表示的。处在一组的运算符有着相同的级别。除了有标记的外(right to left),所有的运算符具有从左到右的结合律。
Precedence
Operator
Description
Example
Overloadable
Associativity
1
::
Scope resolution operator
Class::age = 2;
no
left to right
2
()
()
[]
->
.
++
--
dynamic_cast
static_cast
reinterpret_cast
const_cast
typeid
Function call
Member initalization
Array access
Member access from a pointer
Member access from an object
Post-increment
Post-decrement
Runtime-checked type conversion
Unchecked type conversion
Reinterpreting type conversion
Cast away/Add constness
Get type information
isdigit('1')
c_tor(int x, int y) : _x(x), _y(y * 10) {}
array[4] = 2;
ptr->age = 34;
obj.age = 34;
for (int i = 0; i < 10;="" i++)="" cout=""><>
for (int i = 10; i > 0; i--) cout <>
Y& y = dynamic_cast Y& y = static_cast int const* p = reinterpret_cast int* q = const_cast std::type_info const& t = typeid(x); yes yes yes yes no yes yes no no no no no left to right 3 ! not ~ compl ++ -- - + * & sizeof new new [] delete delete [] (type) Logical negation Alternate spelling for ! Bitwise complement Alternate spelling for ~ Pre-increment Pre-decrement Unary minus Unary plus Dereference Address of Size (of the type) of the operand in bytes Dynamic memory allocation Dynamic memory allocation of array Deallocating the memory Deallocating the memory of array Cast to a given type if (!done) … flags = ~flags; for (i = 0; i < 10;="" ++i)="" cout=""><> for (i = 10; i > 0; --i) cout <> int i = -1; int i = +1; int data = *intPtr; int *intPtr = &data; size_t s = sizeof(int); long* pVar = new long; long* array = new long[20]; delete pVar; delete [] array; int i = (int)floatNum; yes yes yes yes yes yes yes yes no yes yes yes yes yes right to left 4 ->* .* Member pointer selector Member object selector ptr->*var = 24; obj.*var = 24; yes no left to right 5 * / % Multiplication Division Modulus int i = 2 * 4; float f = 10.0 / 3.0; int rem = 4 % 3; yes yes yes left to right 6 + - Addition Subtraction int i = 2 + 3; int i = 5 - 1; yes yes left to right 7 >> Bitwise shift left Bitwise shift right int flags = 33 <> int flags = 33 >> 1; yes yes left to right 8 <> > >= Comparison less-than Comparison less-than-or-equal-to Comparison greater-than Comparison greater-than-or-equal-to if (i < 42)=""> if (i <= 42)="">=> if (i > 42) … if (i >= 42) ... yes yes yes yes left to right 9 == eq != not_eq Comparison equal-to Alternate spelling for == Comparison not-equal-to Alternate spelling for != if (i == 42) ... if (i != 42) … yes - yes left to right 10 & bitand Bitwise AND Alternate spelling for & flags = flags & 42; yes left to right 11 ^ xor Bitwise exclusive OR (XOR) Alternate spelling for ^ flags = flags ^ 42; yes left to right 12 | bitor Bitwise inclusive (normal) OR Alternate spelling for | flags = flags | 42; yes left to right 13 && and Logical AND Alternate spelling for && if (conditionA && conditionB) … yes left to right 14 || or Logical OR Alternate spelling for || if (conditionA || conditionB) ... yes left to right 15 : Ternary conditional (if-then-else) int i = a > b ? a : b; no right to left 16 = += -= *= /= %= &= and_eq ^= xor_eq |= or_eq <> >>= Assignment operator Increment and assign Decrement and assign Multiply and assign Divide and assign Modulo and assign Bitwise AND and assign Alternate spelling for &= Bitwise exclusive or (XOR) and assign Alternate spelling for ^= Bitwise normal OR and assign Alternate spelling for |= Bitwise shift left and assign Bitwise shift right and assign int a = b; a += 3; b -= 4; a *= 5; a /= 2; a %= 3; flags &= new_flags; flags ^= new_flags; flags |= new_flags; flags <=>=> flags >>= 2; yes yes yes yes yes yes yes yes yes yes yes right to left 17 throw throw exception throw EClass(“Message”); no 18 , Sequential evaluation operator for (i = 0, j = 0; i < 10;="" i++,="" j++)=""> yes left to right Order of Evaluation and of Side Effects One important aspect of C++ that is related to operator precedence, is the order of evaluation and the order of side effects in expressions. In most circumstances, the order in which things happen is not specified. For example in f() + g() whether f() or g() is called first is not specified. If at least one of the functions has side effects the results may differ across compilers, different versions of the same compiler or even between multiple runs of the same compiler. C++有关运算符优先级的一个重要方面是在表达式中的赋值和副作用(与外界进行了交互,某些值可能发生了改变)的顺序。多数情况下,事件发生的顺序是不明确的。例如,在式子f()+g()中,是先调用f()还是先调用g()是不明确的。如果至少有一个函数有副作用,算得的结果可能因不同的编译器、一个编译器的不同版本甚至在同一个编译器上的多次运行而有所不同 Further, the effect of certain expressions is undefined. For example, consider the following code: 进一步讲,某些表达式的效果是未定义的。例如,考虑下面的代码: float x = 1;x = x / ++x; The value of x and the rest of the behaviour of the program after evaluating this expression is undefined. The program is semantically ill-formed: x is modified twice between two consecutive sequence points. Expressions like the one above must be avoided. When in doubt, break a large expression into multiple statements to ensure that the order of evaluation is correct. x的值以及程序给表达式赋值后的后面的行为是不得而知的。这个程序从语义上讲是不规范的:在两个连续的序列点之间,x被修改了两次。 像上面一样的表达式应该避免。当有歧义时,将一个复杂的表达式分解成多个陈述以保证赋值的顺序是正确的。 Overloading of Operators Overloading of operators can be very useful and very dangerous. On one hand overloading operators for a class you have created can help with?logistics and readability of code. On the other hand you can overload an operator in such a way that it can either obfuscate or just downright break your program. Use carefully. In particular never overload &&, || or ,. In the overloaded context they lose the guarantee that the left operand is evaluated before the second and that there is a sequence point inbetween. 重载运算符可能非常有用,但也有危险。一方面为一个类重载运算符增加了代码的物流和可读性。另一方面可以在使人糊涂的地方或者完全使人迷惑的地方程序重载一个运算符。小心的重载,尤其是不要重载&&,||和,运算符。因为在重载的上下文中,他们失去了左操作数的赋值在第二个之前的保证,而且之间也会有顺序点。 There are two ways to over load an operator: global function or class member. Example of overloading with a global function: 有两种方式来重载一个运算符:全局函数和类函数。 重载全局函数的例子如下: ostream& operator <(ostream& os,="" const="" myclass&="">(ostream&> But to be able to reach any private data within a user defined class you have to declare the global function as a friend within the definition of the class. 为了访问一个用户定义的类里的私有数据,你必须声明全局函数为友元函数,并且在类中定义。 Example: class myClass ?????{// Gives the operator < function="" access="" to="" 'mydata'//="" (this="" declaration="" should="" not="" go="" in="" public,="" private="" or="" protected)friend="" ostream&="" operator=""><(ostream& lhs,="" const="" myclass&="" rhs);?private:int="">(ostream&> Overloading with a class member can be done as follows: class myClass {public:// The left hand side of this operator becomes '*this'.int operator +(const myClass& rhs);?private:int myData;} C运算符优先级 分类:?程序人生2009-05-18 18:18?10997人阅读?评论(2)?收藏?举报 c 优先口决 括号成员第一; //括号运算符[]() 成员运算符. -> 全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*& 乘除余三,加减四; //这个"余"是指取余运算即% 移位五,关系六; //移位运算符:<>> ,关系:> <>= <=>=> 等于(与)不等排第七; //即== != 位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|) "三分天下"八九十; 逻辑或跟与; //逻辑运算符:|| 和 && 十二和十一; //注意顺序:优先级(||) 低于 优先级(&&) 条件高于赋值, //三目运算符优先级排到 13 位只比赋值运算符和","高//需要注意的是赋值运算符很多! 逗号运算级最低! //逗号运算符优先级最低 Turbo C运算符的优先次序 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━ 表达式????????????????????????????? ┃优先级 ────────────────────────────╂──── ()(小括号) [](数组下标) .(结构成员) ->(指针型结构成员)┃ 最高 ────────────────────────────┃ ↑ !(逻辑非) .(位取反) -(负号) ++(加1) --(减1) &(变量地址)┃ │ ────────────────────────────┃ │ *(指针所指内容) type(函数说明) sizeof(长度计算)??? ┃ │ ────────────────────────────┃ │ *(乘)???? /(除)???? %(取模)??????????????????????? ┃ │ ────────────────────────────┃ │ +(加)???? -(减)??????????????????????????????????? ┃ │ ────────────────────────────┃ │ <(位左移)?????????>>(位右移)???????????????????? ┃ │ ────────────────────────────┃ │ <(小于)??>(小于)??><=(小于等于)??>(大于)?? >=(大于等于)??? ┃ │ ────────────────────────────┃ │ ==(等于)?????? !=(不等于)????????????????????????? ┃ │ ────────────────────────────┃ │ &(位与)??????????????????????????????????????????? ┃ │ ────────────────────────────┃ │ ^(位异或)????????????????????????????????????????? ┃ │ ────────────────────────────┃ │ |(位或)??????????????????????????????????????????? ┃ │ ────────────────────────────┃ │ &&(逻辑与)???????????????????????????????????????? ┃ │ ────────────────────────────┃ │ ||(逻辑或)???????????????????????????????????????? ┃ │ ────────────────────────────┃ │ ?:(?表达式)??????????????????????????????????????? ┃ │ ────────────────────────────┃ │ =??? +=?? -=(联合操作)???????????????????????????? ┃ │ ────────────────────────────┃ │ ,(逗号运算符)????????????????????????????????????? ┃ 最低 /**********************************另一表*************************/ 运算符(优先级从高到低)结合性 ++(后缀) --(后缀) ( )(调用函数) [] {} (组合文字) . ->从左到右 ++(前缀) --(前缀) -+~! sizeof * (取值) &(地址) (type) (都是一元运算)从右到左 (type name)从右到左 * / %从左到右 + -(二者都是二元运算)从左到右 <>>从左到右 <> <=>=从左到右 == !=从左到右 &从左到右 ^从左到右 |从左到右 &&从左到右 ||从左到右 ?:(条件表达式)从右到左 = *= /= %= += -= <=>>= &= |= ^=从右到左 ,(逗号运算符)从左到右 优先 级 算符运 ][ 名称或含义 数下组 圆标括号成员选 (择对) 成员选象(指针择)负 号算运 强制符类转型换 自增算运符自 运算符 取值减算符 运地取运址符 逻辑非算运算 按位符取运反算 长符度算符 运 乘除 余数取()模 加减左 移 移右 于 大于等于大 于小小于等 等于 于不于等按 与 按位异位或 位或按逻辑 与 辑或 逻 用形使 式组名数[常表量式达 (表]式达)/数函名 形(参) 对象.成员名表对象指针- >员成 -名表达 (式据数类型)表式达++变量 名变/名 量+ --变量名/变+名量-指针变量 *变量& !名表达 ~式达表 s式zioe(f达表)式表 达/表式达 表式达*表达式 式整表型达式/整型表达式 表达式+达表式 达表式表-式 达变量>表达式 表式>表达达 表达式式=>表式 达表式达 结合方 说向明 1 ) (.- (类>型 ++) 到右左 单运算目符 单目 算符 单运运算目符单目 算运 单目符算符 单运目运符 算单目算运 符2 - * ! &~siz oe / f * 右到左 双目运%算 符左到 右目运双算 符目运算双符 目运双算符 双目运算符 双运算符目双目运 算符双 运算目符左到右 双目运算符 双目算符 运双目算运 符左到右左 右 到到右左 到左 右左右 左到到 右目运双符 算目双运算符 目双算符 双运目运符算 双目运算符双 目算符 双目运运符 算 34 5 + >> >= 到右左 到右左 7 8 69 01 1112 13 :?= = */ %==+ 条件运算符= 赋值运符 算除后赋值乘后赋值 模取赋值 后加赋值 后后赋减 左移值赋值后右移后赋值 位与按后值赋按位异 或赋后 值位或按后值赋逗 运算号 符 达式1?表表 式2达: 表达式 3变=量达式 变量/表表=式 变量*达=表式 达量变%=表式 达量+=表变达式 变-量=表达 式量变>变=表达式变量& =达表 式变量^=表达 变式量=表达|式 达式,表达表,… 右到式 三目左算运符 4 1 =- = &= ^=> |= 到左右 1 5 ,左 到 右 从左右向 顺运序 算说 : 同明优先一级的运符,算运算序次结合方向所决定由 。单记就简是:! 算术运>算 符 关系>算符 运> &&> | | >赋值算符运范文四:C运算符优先级
范文五:运算符优先级