文档库 最新最全的文档下载
当前位置:文档库 › 数据结构运算符的优先级

数据结构运算符的优先级

数据结构运算符的优先级
数据结构运算符的优先级

#include

#include

#include

#define STACK_INIT_SIZE 100

#define STACKCREMENT 10

#define OPSIZE 7

#define ERROR 0

#define OK 1

#define OVERFLOW -1

unsigned char Prior[7][7] = { // 算符间的优先关系

'>','>','<','<','<','>','>',

'>','>','<','<','<','>','>',

'>','>','>','>','<','>','>',

'>','>','>','>','<','>','>',

'<','<','<','<','<','=',' ',

'>','>','>','>',' ','>','>',

'<','<','<','<','<',' ','='

};

char OP[OPSIZE]={'+','-','*','/','(',')','#'};

typedef struct{

float *base;

float *top;

int stacksize;

}SqStack;

//建立空栈

int InitStack(SqStack &S){

S.base=(float *)malloc(STACK_INIT_SIZE*sizeof(float));

if(!S.base)

exit(OVERFLOW);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

return OK;

}

//取栈顶元素

char GetTop(SqStack &S){

if(S.base==S.base)

return ERROR;

return *(S.top-1);

}

//入栈

int Push(SqStack &S,char e){

if(S.top-S.base>=S.stacksize){

S.base=(float *)realloc(S.base,(S.stacksize+STACKCREMENT)*sizeof(float));

if(!S.base)

exit(OVERFLOW);

S.top=S.base+S.stacksize;

S.stacksize+=STACKCREMENT;

}

*S.top++=e;

return OK;

}

//出栈

int Pop(SqStack &S,float &e){

if(S.base==S.base)

return ERROR;

e=*--S.top;

return OK;

}

//运算操作

float Operate(float a,char theta,float b){

switch(theta){

case '+':return a+b;

case '-':return b-a;

case '*':return a*b;

case '/':return b/a;

default:return 0;

}

}

//判断是否为运算符

int In(char c,char *OP){

bool Find=false;

for(int i=0;i

if(c==OP[i])

Find=true;

}

return Find;

}

//运算符优先关系比较

int ReturnOpOrd(char op,char* TestOp) {

int i;

for(i=0; i< OPSIZE; i++) {

if (op == TestOp[i]) return i;

}

return 0;

}

char Precede(char theta,char c) {

return Prior[ReturnOpOrd(theta,OP)][ReturnOpOrd(c,OP)]; }

// 算术表达式求值的算符优先算法。

// 设OPTR和OPND分别为运算符栈和运算数栈,OP为运算符集合。char EvaluateExpression(){

char TempData[20];

float Data,a,b;

char theta,c,x,Dr[2];

SqStack OPND; // 运算数栈

SqStack OPTR; // 运算符栈

InitStack(OPTR);

Push(OPTR,'#');

InitStack(OPND);

c=getchar();

while(c!='#'||GetTop(OPTR)!='#'){

if(!In(c,OP)){ // 不是运算符则进栈

Push(OPND,c);

c=getchar();

}

else

switch(Precede(GetTop(OPTR),c)){

case '<':Push(OPTR,c);

c=getchar();

break;

case '=':Pop(OPTR,x);

c=getchar();

break;

case '>':Pop(OPTR,theta);

Pop(OPND,b);

Pop(OPND,a);

Push(OPND,Operate(a,theta,b));

break;

}

}

return GetTop(OPND);

}

int main(){

printf("请输入表达式(end #):\n");

printf("%f\n",EvaluateExpression());

return 1;

}

几种运算符优先级

几种运算符优先级: ①!(非) ②算术运算符:()、*、/、%(求余)、+、- ③关系运算符:<、<=、>、>=、==、!= ④逻辑运算符{&&、||} ⑤赋值运算符:= printf(“%d”,4+3>5||5<9); 1 1)算术运算符的结果是计算后的数 a/b: a与b是两个操作数,/是运算符,当两个操作数都是整数,其结果则为整数;若其中之一是实型数,其结果则为实型数。printf(“%d”, 5/2);2 5.0/2=2.5 %(求余):规定其两个操作数都是整数 5%2=1 2)关系运算符的结果是逻辑真(1)或逻辑假(0) Int x=4,y=5; printf(“%d”, (x==y));0 printf(“%d”, (x==5));0 printf(“%d”, (x=5));5

3)逻辑运算符(!&& ||):的结果是逻辑真(1)或逻辑假(0) &&:两者为真则为真,其余则为假 ||:只要一个为真则为真 注意:凡是不为零的数则视为真 printf(“%d”, !4);0 printf(“%d”, 4&&5);1 printf(“%d”, 4&&0);0 printf(“%d”, 4||5);1 printf(“%d”, 4||0);1

复合的赋值运算符:= a*=a------------------a=a*a a+=a------------------a=a+a a/=a------------------a=a/a 规定:复合的赋值运算符就按自右向左的原则计算的,有多少个复合的赋值运算符就有多少步计算 Int a=5; printf("%d",a*=a+=a);100 100 50 a+=a ---a=a+a=5+5=10 a*=a-----a=a*a=100

运算符的优先级顺序

附录:C语言运算符及优先级 优先级运算符含义运算符类型结合方向 15 ()圆括号单目自左向右 [] 下标运算符 —> 指向结构体成员运算符 、结构体成员运算符 14 !逻辑非运算符 自右向左 ~ 按位取反运算符 ++ 自增运算符 -- 自减运算符

- 负号运算符 (类型)类型转换运算符 * 指针运算符 & 地址运算符 Sizeof 长度运算符 13 * 乘法运算符双目自左向右 / 除法运算符 % 求余运算符 12 + 加法运算符 - 减法运算符 11 << 左移运算

符 >> 右移运算符 10 <、<=、>、>= 关系运算符 9 == 等于运算符 != 不等于运算符 8 & 按位与运算符 7 ^ 按位异或运算符 6 | 按位或运算符 5 && 逻辑与运算符 4 || 逻辑或运算符 3 :条件运算符三目自右向左

2 =、+=、-=、*=、 /=、%=、>>=、 <<=、&=、^=、|= 赋值运算符双目 1 ,逗号运算符双目自左向右 括号成员第一; -> 全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*& 乘除余三,加减四; //这个"余"是指取余运算即% 移位五,关系六; //移位运算符:<< >> ,关系:> < >= <= 等等于(与)不等排第七; //即== != 位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|) "三分天下"八九十; 逻辑或跟与 //逻辑运算符:|| 和 && 十二和十一; //注意顺序:优先级(||) 底于优先级(&&) 条件高于赋值, //三目运算符优先级排到 13 位只比赋值运算

运算符优先级及结合顺序

优先级运算符名称或含义使用形式结合方向说明1 [] 数组下标数组名[常量表达式] 左到右 () 圆括号 (表达式)/函数名(形 参表) . 成员选择(对象)对象.成员名 -> 成员选择(指针)对象指针->成员名 2 - 负号运算符-表达式 右到左 单目运算符 (类型) 强制类型转换(数据类型)表达式 ++ 自增运算符++变量名/变量名++ 单目运算符-- 自减运算符--变量名/变量名-- 单目运算符 * 取值运算符*指针变量单目运算符 & 取地址运算符&变量名单目运算符 ! 逻辑非运算符!表达式单目运算符 ~ 按位取反运算符~表达式单目运算符 sizeof 长度运算符sizeof(表达式) 3 / 除表达式/表达式 左到右 双目运算符 * 乘表达式*表达式双目运算符 % 余数(取模) 整型表达式/整型表 达式 双目运算符 4 + 加表达式+表达式 左到右 双目运算符 - 减表达式-表达式双目运算符 5 << 左移变量<<表达式 左到右 双目运算符 >> 右移变量>>表达式双目运算符 6 > 大于表达式>表达式

左到右 双目运算符 >= 大于等于表达式>=表达式双目运算符 < 小于表达式<表达式双目运算符 <= 小于等于表达式<=表达式双目运算符 7 == 等于表达式==表达式 左到右 双目运算符 != 不等于表达式!= 表达式双目运算符 8 & 按位与表达式&表达式左到右双目运算符 9 ^ 按位异或表达式^表达式左到右双目运算符 10 | 按位或表达式|表达式左到右双目运算符 11 && 逻辑与表达式&&表达式左到右双目运算符 12 || 逻辑或表达式||表达式左到右双目运算符 13 ?: 条件运算符 表达式1? 表达式2: 表达式3 右到左三目运算符 14 = 赋值运算符变量=表达式 右到左 /= 除后赋值变量/=表达式 *= 乘后赋值变量*=表达式 %= 取模后赋值变量%=表达式 += 加后赋值变量+=表达式 -= 减后赋值变量-=表达式 <<= 左移后赋值变量<<=表达式 >>= 右移后赋值变量>>=表达式 &= 按位与后赋值变量&=表达式 ^= 按位异或后赋值变量^=表达式 |= 按位或后赋值变量|=表达式 15 , 逗号运算符表达式,表达式,… 左到右 从左向右顺 序运算

C运算符优先级记忆口诀

优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。 所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。 具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。()是与函数相关,[]与数组相关,而->及.是取结构成员。 其次是单目运算符,所有的单目运算符具有相同的优先级,因此在我认为的真正的运算符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。 接下来是算术运算符,*、/、%的优先级当然比+、-高了。 移位运算符紧随其后。 其次的关系运算符中,< <= > >=要比 == !=高一个级别,不大好理解。 所有的逻辑操作符都具有不同的优先级(单目运算符出外,!和~) 逻辑位操作符的"与"比"或"高,而"异或"则在它们之间。 跟在其后的&&比||高。 接下来的是条件运算符,赋值运算符及逗号运算符。 在C语言中,只有4个运算符规定了运算方向,它们是&&、| |、条件运算符及赋值运算符。 &&、| |都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。如 a = 0 && b; &&运算符的左边位0,则右边表达式b就不再判断。 在条件运算符中。如a?b:c;先判断a的值,再根据a的值对b或c之中的一个进行求值。 赋值表达式则规定先对右边的表达式求值,因此使 a = b = c = 6;成为可能。 初——单——算,关——逻,条——赋——逗 断句如上。怎么记忆呢? 我是这样记忆的:“”内表示运算符的简称。 “初”次“单”独找你“算”账,(因为你和关羽有仇) “关”羽带着兵巡“逻”(因为你躲了起来) 你跑到别处了,隐姓埋名,“挑”着“豆腐”卖。(当了卖豆腐的):豆腐——实际上是“赋”“逗” ?2009-4-8 15:43 ?回复 我是这样记得: 一个自称黑的初学者连编程都不会还算什么黑客,把自己关起来反思吧,逻辑都没有条理,因为你不认真学!还找理由说因为天赋不够,真逗``

c语言运算符及其优先级汇总表口诀

C语言运算符及其优先级汇总表口诀 圆下箭头一顿号 非凡增减富强针地长 三乘除,四加减,五移位 千万别把鱼忘记,它在盛饭的厨子里 小灯大灯灯灯不等 爸喂鱼,舅疑惑,裸鸡也疑惑 十三姨,十四父,十五逗,兜到低 “圆下箭头一顿号”指的是第15级的运算符。其中圆指的是运算符(),下指的是下标运算符[],箭头指的是指向结构体成员运算符->,顿号指的是结构体成员运算符、“非凡增减富强针地长”指的是第14级的运算符。其中非指的是逻辑运算符!,凡指的是按位取反运算符~,增减指的是自增和自减运算符++和--,富指的是负号运算符-,强指的是类型转换运算符(类型),针指的是指针运算符*,地指的是地址运算符&,长指的是长度运算符Sizeof “三乘除,四加减,五移位” 指的是第13级到第11级的运算符。其中三四五并无实际意义,只是起区分级别而已。也可以想象三指的是第13级运算符。乘除指的是乘法运算符*和除法运算符/,加减指的是加法运算符+和减法运算符-,移位指的是左移运算符<<和右移运算符>> “千万别把鱼忘记,它在盛饭的厨子里”指的是求余运算符%,它位于盛饭的厨子里,即指和乘法运算符、除法运算符在一起。 “小灯大灯灯灯不等” 指的是第10级到第9级的运算符。其中小灯大灯指的是关系运算符<、<=、>和>=,灯灯指的是等于运算符==,不等指的是不等于运算符!= “爸喂鱼,舅疑惑,裸鸡也疑惑”指的是第8级到第4级的运算符。其中,爸喂鱼之指的是第8级的按位与运算符&,舅疑惑指的是第7级的按位异或运算符^和第6级的按位或运算符||,裸鸡也疑惑指的是第5级、第4级的逻辑与运算符&&和逻辑或运算符|| “十三姨,十四父,十五逗,兜到低”指的是第3级到第1级的运算符。其中,十三姨指的是条件运算符?: (三有双重含义,即指?:的优先级别是三,它的运算符类型也是三目,?难道不是姨即疑惑吗?),十四父的十四没有实际意义,父指的是赋值运算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,十五逗指的是第1级的运算符,兜到低指的是15级运算符以,结束。 附录:C语言运算符及优先级 优先级运算符含义运算符类型结合方向 15 ()圆括号单目自左向右 [] 下标运算符 —> 指向结构体成员运算符 、结构体成员运算符 14 !逻辑非运算符自右向左 ~ 按位取反运算符 ++ 自增运算符 -- 自减运算符 - 负号运算符 (类型)类型转换运算符 * 指针运算符

C#语言的42个运算符及15个优先级

C#语言的42个运算符及15个优先级(补充) 一、赋值运算符 赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。符号为‘=’。这里并不是等于的意思,只是赋值,等于用‘==’表示。 注意:赋值语句左边的变量在程序的其他地方必须要声明。 得已赋值的变量我们称为左值,因为它们出现在赋值语句的左边;产生值的表达式我们称为右值,因为她它们出现在赋值语句的右边。常数只能作为右值。 例如: count=5; total1=total2=0; 第一个赋值语句大家都能理解。 第二个赋值语句的意思是把0同时赋值给两个变量。这是因为赋值语句是从右向左运算的,也就是说从右端开始计算。这样它先total2=0;然后total1=total2;那么我们这样行不行呢? (total1=total2)=0; 这样是不可以的,因为先要算括号里面的,这时total1=total2是一个表达式,而赋值语句的左边是不允许表达式存在的。 二、算术运算符 在C语言中有两个单目和五个双目运算符。 符号功能 + 单目正 - 单目负 * 乘法 / 除法 % 取模 + 加法 - 减法 下面是一些赋值语句的例子,在赋值运算符右侧的表达式中就使用了上面的算术运算符: Area=Height*Width; num=num1+num2/num3-num4; 运算符也有个运算顺序问题,先算乘除再算加减。单目正和单目负最先运算。 取模运算符(%)用于计算两个整数相除所得的余数。例如: a=7%4; 最终a的结果是3,因为7%4的余数是3。 那么有人要问了,我要想求它们的商怎么办呢? b=7/4; 这样b就是它们的商了,应该是1。 也许有人就不明白了,7/4应该是1.75,怎么会是1呢?这里需要说明的是,当两个整

C语言运算符优先级 详细列表

C语言运算符优先级详细列表 运算符的优先级:C语言中,运算符的运算优先级共分为15 级。1 级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。 运算符的结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。 优先级运算符名称或含义使用形式结合方向说明 1 [] 数组下标数组名[常量表达式] 左到右() 圆括号 (表达式)/函数名(形 参表) . 成员选择(对象)对象.成员名 -> 成员选择(指针)对象指针->成员名 2 - 负号运算符-表达式 右到左 单目运算符(类型) 强制类型转换(数据类型)表达式 ++ 自增运算符++变量名/变量名++ 单目运算符-- 自减运算符--变量名/变量名-- 单目运算符* 取值运算符*指针变量单目运算符& 取地址运算符&变量名单目运算符! 逻辑非运算符!表达式单目运算符~ 按位取反运算符~表达式单目运算符sizeof 长度运算符sizeof(表达式) 3 / 除表达式/表达式 左到右 双目运算符* 乘表达式*表达式双目运算符% 余数(取模) 整型表达式/整型表 达式 双目运算符 4 + 加表达式+表达式左到右双目运算符

运算符的优先级

第一种记忆方法: 你可以按照熟悉程度来记忆: 先乘除后加减:* / % 在第3级;+ - 在第4级; 括号仍旧是最优先的,和以前学习的概念一样,在第1级; 最第一级是逗号,组建逗号表达式用的。第15级; 我们还熟悉的是大于,小于,大于等于,小于等于,年年有鱼,六六大顺,那么在第6级; 顺便记忆不等于!= ==,在第7级; 逻辑或||和逻辑与&&要交叉记忆,长的像11的却在12级,另一个就在11级。 在我们这个表里,大部分都是双目运算符,那么现在来看看特殊的,单目运算符和三目运算符,单目运算符在第2级,三目运算符?:在第13级。 还有一个很熟悉的赋值号=,复合赋值号+=,地位很低,往往都是其他运算执行完毕后,才执行它,故在第14级。 经过一番努力,我们基本上记住了1,2,3,4,6,7,11,12,13,14,15级,初次记忆来说,已经很成功了。 第二种方法:记忆《秋夜打渔图》 秋夜打渔图 扩大成甲鱼,大小不等鱼;

位于一伙伙,渔火三服豆; 意义:渔夫捕鱼,有甲鱼,大小不等的鱼,都在一伙伙渔夫的手里,河面上有星星点点的渔火,还有丰收的大豆,整个呈现出丰收的景象; 1扩:代表括号; 2大:谐音,单,单目运算符; 3成:谐音:乘号; 4甲:谐音:加号; 5鱼:谐音:移动,左移右移; 6大小:代表大于号,小于号,还有大于等于号,小于等于号; 7不等鱼:代表不等于号和等于号; 8位于:谐音:按位与&; 9(位)一伙:谐音:按位异或^; 10(位)伙:谐音:按位或|; 11渔:谐音:逻辑与,&&; 12火:谐音:逻辑或,||; 13三:三目运算符?:; 14服:谐音:赋值运算符; 15豆:逗号运算符;

C语言运算符优先级表

C语言运算符优先级表(由上至下,优先级依次递减) 第一、像() [] -> .之类的理所当然是最优先的,其实它们压根也不算什么运算符了第二、除了上面的四种运算符之外,接下来就是单目运算符,也就是! ~ ++ -- - (type) * & sizeof 了。记住它们的顺序可是自右向左啊!其实结合实例是很容易理解的,比如i++等。第三、跟着就是双目运算符了,也是C语言运算符优先级中最容易让人混淆的地方了。其实也没有那么可怕,你认真观察就会发现。在双目运算符中,算术运算符优先级最高,然后是移位运算符,接着是关系运算符,再着是逻辑运算符。不过这边需要说的是,在关系运算符中,< <= > >=比== !=的优先级来得高。此外,在逻辑运算符中,与运算又比或运算优先级来得高,异或则处于二者之间。同样的,你可以类比出&&与||的优先级关系. 第四、在双目操作符之后,就是三目操作符了,没有什么好说的了。第五、然后是赋值操作符,你也许会把赋值操作符与三目运算符的优先级搞混。没有关系,我想你一定写过这样的语句(如果没有,

请你记住!):max = (a>b)?a:b; ,从这个语句里,你就不难记住赋值运算符为什么比三目运算符的优先级低了!第六、逗号运算符是分割各个子语句的(感觉这么说有点不准确,不过我想大家会明白我的意思的),自然优先级最低了,我想这个应该不是很容易混淆的。总结一下,按运算符优先级从高到低:单目运算符->双目运算符->三目运算符->赋值运算符->逗号运算符特别在双目运算符中,按运算符优先级从高到低:算术运算符->移位运算符->关系运算符(其中== 和 !=优先级又较低)->逻辑运算符(按位与-〉按位异或-〉按位或-〉逻辑与-〉逻辑或)! 运算符的结合性指同一优先级的运算符在表达式中操作的组织方向, 即: 当一个运 算对象两侧运算符的优先级别相同时, 运算对象与运算符的结合顺序, C 语言规定了各种运算符的结合方向( 结合性) 。大多数运算符结合方向是“自左至右”, 即: 先左后右, 例如a- b+c, b 两侧有- 和+两种运算符的优先级相同, 按先左后右结合方向, b 先与减 号结合, 执行a- b 的运算, 再执行加c 的运算。除了自左至右的结合性外, C 语言有三类运算符参与运算的结合方向是从右至左。即: 单目运算符, 条件运算符, 以及赋值运算符。关于结合性的概念在其他高级语言中是没有的, 这是C语言的特点之一。 ++a 或a++和--a 或a--分别称为前置加或后置加运算和前置减或后置减运算,都是单目运算符。值得注意的是, 前置、后置运算只能用于变量, 不能用于常量和表达式, 且结合方向是从右至左。如当i=6 时, 求- i++的值和i 的值。由于“- ”(负号) “++”为同一个优先级, 故应理解为- (i++), 又因是后置加, 所以先有-i++的值为-6, 然后i 增值1 为7, 即i=7。 例1 main() { int a=3,b=5,c; c=a*b+++b; printf ( “c=%d”, c); } 要得出c 的值, 首先要搞清+++的含义。++运算符的结合方向是自右向左的, 如果将表达式理解为:c=a*b+(++b);实际上C 编译器将表达式处理为:c=(a*b++)+b, 因为C 编译器总是从左至右尽可能多地将若干个字符组成一个运算符, 如i+++j 等价于(i++)+j。接下来是解决a*b++的问题, 因为++运算符的运算对象只能是整型变量而不能是表达式或常数, 所以a *b++显然是a*(b++)而非(a*b)++, 因此整个表达式就是c=(a*(b++))+b,结果为c=20。 例2 main() { int i=1,j; j=i+++i+++i++; printf( “i=%d,j=%d\n”, i,j);

C语言中的运算符及其优先级

附录2 C语言中的运算符及其优先级

同一优先级的运算符,运算次序由结合方向所决定。 由于C语言中运算符多,优先级复杂,难以记忆,针对上述运算符,我们可以归纳成几名口诀,以便于记忆:

优先级口诀 括号成员第一;括号运算符[]() 成员运算符. -> 全体单目第二;所有的单目运算符比如++ -- +(正) -(负) 指针运算*& 乘除余三,加减四;这个"余"是指取余运算即% 移位五,关系六;移位运算符:<< >> ,关系:> < >= <= 等 等于(与)不等排第七;即== != 位与异或和位或;这几个都是位运算: 位与(&)异或(^)位或(|) "三分天下"八九十; 逻辑或跟与;逻辑运算符:|| 和 && 十二和十一;注意顺序:优先级(||) 底于优先级(&&) 条件高于赋值, 三目运算符优先级排到 13 位只比赋值运算符和","高 逗号运算级最低!逗号运算符优先级最低 C优先级的口诀收藏 学习C语言也有一段时间了,感觉C语言的运算符优先级很难记住,特别是对于初学者而言! 也许你会说没有记住没关系,用括号来改变优先级就可以了。但是很多情况下,因为依赖括号很容易导致程序可读性差,当然我不是反对加括号,只是提倡恰到好处。总之,还是记住好些,读别人的程序也方便点。近来翻看了一下优先级,感觉还是有规律可循的,拿来和大家分享,希望对大家有帮助! 先给出C语言的运算符优先级表: 第一、像() [] -> .之类的理所当然是最优先的,其实它们压根也不算什么运算符了 第二、除了上面的四种运算符之外,接下来就是单目运算符,也就是! ~ ++ -- - (type) * & sizeof 了。记住它们的顺序可是自右向左啊!其实结合实例是很容易理解的,比如i++等。 第三、跟着就是双目运算符了,也是C语言运算符优先级中最容易让人混淆的地方了。其实也没有那么可怕,你认真观察就会发现。在双目运算符中,算术运算符优先级最高,然后是移位运算符,接着是关系运算符,再着是逻辑运算符。不过这边需要说的是,在关系运算符中,< <= > >=比== !=的优先级来得高。此外,在逻辑运算符中,与运算又比或运算优先级来得高,异或则处于二者之间。同样的,你可以类比出&&与||的优先级关系. 第四、在双目操作符之后,就是三目操作符了,没有什么好说的了。 第五、然后是赋值操作符,你也许会把赋值操作符与三目运算符的优先级搞混。没有关系,我想你一定写过这样的语句(如果没有,请你记住!):max = (a>b)?a:b; ,从这个语句里,你就不难记住赋值运算符为什么比三目运算符的优先级低了! 第六、逗号运算符是分割各个子语句的(感觉这么说有点不准确,不过我想大家会明白我的意思的),自然优先级最低了,我想这个应该不是很容易混淆的。

VB各种运算符及优先级

运 算符 作用区别示例结果& 将两 个字符串 拼接起来 连接符两旁的操作数不管是字符型还是 数值型,系统先将操作数转换成字符,然后再 连接。 "123"&55 "abc"+12 "12355" "abc12" + 连接符两旁的操作数均为字符型;若均为 数值型则进行算术加法运算;若一个为数字字 符型,一个数值型,则自动将数字字符转换为 数值,然后进行算术加;若一个为非数字字符 型,一个数值型,则出错。 "123"+55 "abc"+12 178 出错 Like运算符 通配符说明用法 ?任何单一字符Chi可写成c?i * 任何个数字符,包括空字符Chi可写成C* # 任何一个数字(0~9)Ch98可写成Ch## [] []中任何一个单字符Chi可写成C[a-z]I,还可写成C[ag-z] [!] 不在[!]中的任何单一字符Chi可写成C[!a-gi-z] B = “a1a” Like “a#a” ‘返回True

B = “D” Like “[A-Z]” ‘返回True B = “D” Like “[!A-Z]” ‘返回False B = “CAT1234Hdrg” Like “C?T*” ‘返回True B = “BAT1234Hdrg” Like “C?T*” ‘返回False 关系运算符 运算符含义示例结果= 等于"ABCDE"="ABR" False > 大于"ABCDE">"ABR" False >= 大于等于"bc">="大小" False < 小于23<3 False <= 小于等于"23"<="3" True <> 不等于"abc"<>"ABC" True Like 字符串匹配"ABCDEFG" Like "*DE*" True Is 对象引用比较 注意: 1)如果两个操作数都是数值型,则按其大小比较 2)如果两个操作数都是字符型,则按字符的ASCII码值从左到右一一比较3)汉字字符大于西文字符 4)关系运算符的优先级相同 逻辑运算符 运算符含义 优 先级 说明示例结果 Not 取反,逻 辑非 1 当操作数为假时,结果为 真 Not F Not T T F And 逻辑与 2 两个操作数均为真时,结 果才为真T And T F And F T And F F And T T F F F Or 逻辑或 3 两个操作数中有一个为 真时,结果为真T Or T F Or F T Or F F Or T T F T T

运算符优先级

运算符是表达式很重要的一部分,它指示对表达式中的操作数进行什么样的运算,如+、-、*、/、%等。根据运算符所需操作数的个数,可以把运算符分为以下3类。本节介绍运算符的知识点。 一元运算符:只带有一个操作数并使用前缀表示法(如--x)或后缀表示法(如x++),如++、- -等运算符。 二元运算符:带有两个操作数并且全都使用中缀表示法(如x+y),如+、-、*、/等运算符。 三元运算符:带有3个操作数并使用中缀表示法,如?: 运算符。 注意:C#语言只包含一个三元运算符:?:。 5.2.1 运算符优先级 算术表达式是最为常见的一种表达式。它由操作数和运算符组成,而且这些运算符之间是存在一定优先级的,如*运算符的优先级就大于+运算符的优先级。C#语言中的运算符一样,也存在优先级。在计算表达式的值时,也必须遵循运算符的优先级的规则。 特别地,当表达式包括多个运算符时,运算符的优先级控制各个运算符的计算顺序。对于x+y*z表达式而言,该表达式首先计算y*z表达式的值,然后再计算y*z表达式的结果与x 的和。即该表达式等价于x+(y*z)表达式,那是因为*运算符的优先级大于+运算符的优先级。根据运算符的优先级可以把C#中的运算符分为以下14类,如表5.2所示。 表5.2 C#中的运算符表 注意:表5.2是按照从最高到最低的优先级顺序列举了C#语言的所有运算符。

当操作数出现在具有相同优先级的两个运算符之间时,运算符的顺序与运算符本身特性相关,具体说明如下所示。 除了赋值运算符外,所有的二元运算符都是从左向右执行运算。如"x+y+z"表达式按照"(x+y)+z"表达式进行计算。 赋值运算符和?:条件运算符是从右向左执行运算。如x=y=z表达式按照x=(y=z)表达式进行计算

附录3 C语言中的运算符及其优先级

附录3 C语言中的运算符及其优先级 306 附录3 C语言中的运算符及其优先级

附录3 C语言中的运算符及其优先级 说明: 同一优先级的运算符,运算次序由结合方向所决定。 由于C语言中运算符多,优先级复杂,难以记忆,针对上述运算符,我们可以归纳成几名口诀,以便于记忆: 优先级口诀 括号成员第一;括号运算符[]() 成员运算符. -> 全体单目第二;所有的单目运算符比如++ -- +(正) -(负) 指针运算*& 乘除余三,加减四;这个"余"是指取余运算即% 移位五,关系六;移位运算符:<< >> ,关系:> < >= <= 等 等于(与)不等排第七;即== != 位与异或和位或;这几个都是位运算: 位与(&)异或(^)位或(|) "三分天下"八九十; 逻辑或跟与;逻辑运算符:|| 和 && 十二和十一;注意顺序:优先级(||) 底于优先级(&&) 条件高于赋值, 三目运算符优先级排到 13 位只比赋值运算符和","高 逗号运算级最低!逗号运算符优先级最低 醋坛酸味灌 味落跳福豆 共44个运算符 醋-初等,4个:( ) [ ] -> 指向结构体成员. 结构体成员 坛-单目,9个:! ~ ++ -- -负号(类型) *指针&取地址sizeof长度(结合方向:自右向左) 酸-算术,5个:* / % + -减 味-位移,2个:<< >> 灌-关系,6个:< <= > >= == 等于!= 不等于 味-位逻,3个:& 按位与^ 按位异或| 按位或 落-逻辑,2个:&& 逻辑与|| 逻辑或 跳-条件,1个,三目:? : (结合方向:自右向左) 福-赋值,11个:= += -= *= /= %= >>= <<= &= ^= |= (结合方向:自右向左) 307

c语言运算符优先级

c语言运算符优先级 Turbo C的运算符非常丰富, 主要分为三大类: 算术运算符, 关系运算符与 逻辑运算符, 按位运算符。除此之外, 还有一些用于完成特殊任务的运算符。下 面分别进行介绍。 5.1 算术运算符 Turbo C的算术运算符如下: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符作用 ──────────────────────────── + 加, 一目取正 - 减, 一目取负 * 乘 / 除 % 取模 -- 减1 ++ 加1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 一、一目和二目操作 一目操作是指对一个操作数进行操作。例如: -a是对a进行一目负操作。 二目操作(或多目操作)是指两个操作数(或多个操作数)进行操作。 在Turbo C中加、减、乘、除、取模的运算与其它高级语言相同。需要注意 的是除法和取模运算。 例如: 15/2 是15除以2商的整数部分7 15%2 是15除以2的余数部分1 对于取模运算符"%", 不能用于浮点数。 另外, 由于Turbo C中字符型数会自动地转换成整型数, 因此字符型数也可 以参加二目运算。 例如: main() { char m, n; /*定义字符型变量*/ m='c'; /*给m赋小写字母'c'*/ n=m+'A'-'a'; /*将c中的小写字母变成大写字母'B'后赋给n*/ ... } 上例中m='c'即m=98, 由于字母A和a的ASCII码值分别为65和97。这样可以将

小写字母变成大写字母, 反之, 如果要将大写字母变成小写字母, 则用c+ 'a' -'A'进行计算。 二、增量运算 在Turbo C中有两个很有用的运算符, 在其它高级语言中通常没有。这两个 运算符就是增1和减1运算符"++"和"--", 运算符"++"是操作数加1, 而"--" 则是 操作数减1。 例如: x=x+1 可写成x++, 或++x x=x-1 可写成x--, 或--x x++(x--)与++x(--x)在上例中没有什么区别, 但x=m++和x=++m却有很大差别。 x=m++ 表示将m的值赋给x后, m加1。 x=++m 表示m先加1后, 再将新值赋给x。 三、赋值语句中的数据类型转换 类型转换是指不同类型的变量混用时的类型改变。 在赋值语句中, 类型转换规则是: 等号右边的值转换为等号左边变量所属的类型。 例如: main() { int i, j; /*定义整型变量*/ float f, g=2.58; /*定义浮点型变量*/ f=i*j; /*i与j的乘积是整型数, 被转换成为浮点数赋给f*/ i=g; /*g中的浮点型数转换成为整型数赋给i*/ ... } 由于Turbo C按上述数据类型转换规则, 因此在作除法运算时应特别注意。 例如: main() { float f; int i=15; f=i/2; } 上面程序经运行后, f=7并不等于准确值7.5。正确的程序应该是: main() { float f; int i=15;

计算运算符和优先级

计算运算符和优先级 运算符用于指定要对公式中的元素执行的计算类型。计算时有一个默认的次序,但可以使用括号更改计算次序。 Excel 执行公式运算的次序 运算符类型 有四种不同类型的运算符︰算术、比较、文本串联运算符(合并文本),以及引用。 算术运算符 若要执行基本的数学运算,例如加法、减法或乘法;合并数字;以及生成数值结果,在公式中使用以下算术运算符︰ 算术运算符含义示例结果 +(加号)加法= 3 + 3 6 –(减号)减法 负数=3–1 =–1 2 -1 *(星号)乘法= 3 * 3 9 /(正斜杠)除法= 15/3 5 %(百分号)百分比 = 20%* 20 4 ^(脱字号)乘方= 3 ^2 9 比较运算符 您可以使用以下运算符来比较两个值。当使用以下运算符来比较两个值时,则结果为逻辑值TRUE 或FALSE。 比较运算符含义示例 =(等号)等于A1=B1 >(大于号)大于A1>B1 <(小于号)小于A1=(大于等于号)大于或等于 A1>=B1 <=(小于等于号)小于或等于 A1<=B1 <>(不等号)不等于A1<>B1 文本连接运算符 使用与号(&) 连接(组合)一个或多个文本字符串以生成一段文本。

文本运算符含义示例结果 &(与号)将两个值 连接或串 起来产生 一个连续 的文本值 ="North"&"wind" “Northwind” ="Hello"&""和"世界" 本示例插入两个单词之间空格 字符。空格字符指定一个空格括 在左括号和右引号("")。 世界您好 引用运算符 可以使用以下运算符对单元格区域进行合并计算。引用运 算符 含义示例 :(冒号)区域运算符,生成对两个引用之间所有 单元格的引用(包括这两个引用) B5:B15 ,(逗号)联合运算符,将多个引用合并为一个引 用 SUM(B5:B15,D5:D15) (空格)交集运算符,返回公式中范围常见的单 元格的引用。在此示例中,C7 单元格位 于两个区域中,因此很交叉。 B7:D7 C6:C8 返回页首 Excel 执行公式运算的次序 在某些情况中,执行计算的次序会影响公式的返回值,因此,了解如何确定计算次序以及如何更改次序以获得所需结果非常重要。 计算次序 公式计算中以特定顺序的值。在Excel 中的公式始终以等号(=)开始。在等号告诉Excel 后面的字符构成公式。关注等号是元素是计算(操作数,如数字或单元格引用),其隔开运算符(例如+、-,*,或/)。Excel 根据特定的每个公式中的运算符顺序计算从左到右,该公式。 运算符优先级 如果一个公式中有若干个运算符,Excel 将按下表中的次序进行计算。如果一个公式中的若干个运算符具有相同的优先顺序(例如,如果一个公式中既有乘号又有除号),Excel 将从左到右进行计算。 运算符说明 :(冒号)引用运算符

C语言运算符的优先级、结合方向、使用形式等详细列表

优先级运算符名称或含 义 使用形式结合 方向 说明 1 [] 数组下标数组名[常量 表达式] 左到右 () 圆括号(表达式)/函 数名(形参表) . 成员选择 (对象) 对象.成员名 -> 成员选择 (指针)对象指针->成 员名 2 - 负号运算 符-表达式右到 左 单目 运算 符 (类型) 强制类型 转换(数据类型)表 达式 ++ 自增运算 符++变量名/变 量名++ 单目 运算 符 -- 自减运算 符--变量名/变 量名-- 单目 运算 符 * 取值运算 符*指针变量单目 运算 符 & 取地址运 算符&变量名单目 运算 符 ! 逻辑非运 算符!表达式单目 运算 符 ~ 按位取反 运算符~表达式单目 运算 符

sizeof 长度运算 符sizeof(表达 式) 3 / 除表达式/表达 式左到 右 双目 运算 符 * 乘表达式*表达 式双目运算符 % 余数(取 模)整型表达式/ 整型表达式 双目 运算 符 4 + 加表达式+表达 式左到 右 双目 运算 符 - 减表达式-表达 式双目运算符 5 << 左移变量<<表达式左到 右双目运算符 >> 右移变量>>表达式双目 运算 符 6 > 大于表达式>表达 式左到 右 双目 运算 符 >= 大于等于表达式>=表达 式双目运算符 < 小于表达式<表达 式双目运算符 <= 小于等于表达式<=表达 式双目运算

符 7 == 等于表达式==表达 式左到 右 双目 运算 符 != 不等于表达式!= 表 达式双目运算符 8 & 按位与表达式&表达 式左到 右 双目 运算 符 9 ^ 按位异或表达式^表达 式左到 右 双目 运算 符 10 | 按位或表达式|表达 式左到 右 双目 运算 符 11 && 逻辑与表达式&&表达 式左到 右 双目 运算 符 12 || 逻辑或表达式||表达 式左到 右 双目 运算 符 13 ?: 条件运算 符表达式1? 表 达式2: 表达 式3 右到 左 三目 运算 符 14 = 赋值运算 符变量=表达式右到 左 /= 除后赋值变量/=表达式 *= 乘后赋值变量*=表达式 %= 取模后赋 值 变量%=表达式+= 加后赋值变量+=表达式

相关文档