运算符与表达式原理是什么(C语言赋值运算符与赋值表达式)
本文目录
- C语言赋值运算符与赋值表达式
- C语言中,“[]“运算符的原理是什么
- 算术运算符和算术表达式
- 运算符和表达式之间有什么联系
- 定义运算的原理是什么
- C语言的运算符和表达式有什么区别
- C语言,逻辑运算的理解,他是基于一个什么的原理
- C语言中表达式是如何运算的那些运算符什么意思
- Python教程:第19篇 逻辑运算符
C语言赋值运算符与赋值表达式
我们都知道基本的赋值运算符是"=",他的优先级别低于其他的运算符,所以对该运算符往往最后读取。下面和大家分享一下C语言赋值运算符与赋值表达式,一起来看看吧!
C语言赋值运算符与赋值表达式1
一、赋值运算符与赋值表达式
赋值符号“=“就是赋值运算符,作用是将一个数据赋给一个变量或将一个变量的值赋给另一个变量,由赋值运算符组成的表达式称为赋值表达式。一般形式为:
变量名=表达式
在程序中可以多次给一个变量赋值,每赋一次值,与它相应的存储单元中的数据就被更新一次,内存中当前的数据就是最后一次所赋值的那个数据。
例:a=12;此表达式读作“将10的值赋值给变量a”。
说明:
a、如果赋值号两边的运算对象类型不一致,系统会自动进行类型转换,转换的规则:将赋值号右边表达式的值的类型转换成赋值号左边变量的类型,
例:inty=3.5;在变量y中最终存储的是整数3。
b、可以将复制表达式的.值再赋值给变量,形成连续赋值。
例如:x=y=25是一个连续赋值表达式,x=y=25等价于x=(y=25),所以表达式x=y=25最终的值为25。
二、复合的赋值运算符
在赋值运算符之前加上其他运算符可以构成复合赋值运算符。其中与算术运算有关的复合运算符是:+=,—=,x=,/=,%=。
两个符号之间不可以有空格,复合赋值运算符的优先级与赋值运算符的相同。表达式n+=1等价于n=n+1,作用是取变量n中的值增1再赋给变量n,其他复合的赋值运算符的运算规则依次类推。
如求表达a+=a—=axa的值,其中a的初值为12。
步骤:
(1)先进行“a—=axa“运算,相当于a=a—axa=12—144=—132。
(2)再进行“a+=—132“运算,相当于a=a+(—132)=—132—132=—264。
C语言赋值运算符与赋值表达式2
其一般形式为:
变量=表达式
例如:
x=a+b
w=sin(a)+sin(b)
y=i+++--j
赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符具有右结合性,因此a=b=c=5可理解为a=(b=(c=5))。
在其它高级语言中,赋值构成了一个语句,称为赋值语句。 而在C中,把“=”定义为运算符,从而组成赋值表达式。 凡是表达式可以出现的地方均可出现赋值表达式。
例如:式子x=(a=5)+(b=8)是合法的。它的意义是把5赋予a,8赋予b,再把a,b相加,和赋予x,故x应等于13。
在C语言中也可以组成赋值语句,按照C语言规定,任何表达式在其未尾加上分号就构成为语句。因此如x=8;a=b=c=5;都是赋值语句,在前面各例中我们已大量使用过了。
类型转换
如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:
实型赋予整型,舍去小数部分。
整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符量。
【例3-18】
#include
int main(void){
int a,b=322;
float x,y=8.88;
char c1=k,c2;
a=y;
x=b;
a=c1;
c2=b;
printf("%d,%f,%d,%c",a,x,a,c2);
return 0;
}
本例表明了上述赋值运算中类型转换的规则。a为整型,赋予实型量y值8.88后只取整数8。x为实型,赋予整型量b值322, 后增加了小数部分。字符型量c1赋予a变为整型,整型量b赋予c2 后取其低八位成为字符型(b的低八位为01000010,即十进制66,按ASCII码对应于字符B)。
注意:经大家反馈,笔者发现上面的例子容易造成误解,现已对代码进行更改,更改时间 2014-07-04 09:12:45,看评论的读者请注意评论时间,不要混淆。
更改后的代码如下:
#include
int main(void){
int a,c,b=322;
float x,y=8.88;
char c1=k,c2;
a=y;
x=b;
c=c1;
c2=b;
printf("a=%d, x=%f, c=%d, c2=%c ", a, x, c, c2);
return 0;
}
输出结果:
a=8, x=322.000000, c=107, c2=B
复合的赋值运算符
在赋值符“=”之前加上其它二目运算符可构成复合赋值符。如+=、-=、*=、/=、%=、《《=、》》=、&=、^=、|=。
构成复合赋值表达式的一般形式为:
变量 双目运算符=表达式
它等效于
变量=变量 运算符 表达式
例如:
a+=5 等价于 a=a+5
x*=y+7 等价于 x=x*(y+7)
r%=p 等价于 r=r%p
C语言中,“[]“运算符的原理是什么
C语言的编译器遇到""运算符时对 X-expr中的x-expr 生成求出地址的代码,计算结果放在临时单元t1y-exp 生成求出索引的代码,计算结果放在临时单元t2x的类型用sizeof 求出大小然后计算 t1 + t2 *sizeof,得到一个内存地址引用如果x做左值,这个内存引用用来存将来的运算结果如果x的表达式使用
算术运算符和算术表达式
有个口诀先记记:C语言运算符及其优先级汇总表口诀圆下箭头一顿号非凡增减富强针地长三乘除,四加减,五移位千万别把鱼忘记,它在盛饭的厨子里小灯大灯灯灯不等爸喂鱼,舅疑惑,裸鸡也疑惑十三姨,十四父,十五逗,兜到低C语言运算符及其优先级汇总表口诀圆下箭头一顿号非凡增减富强针地长三乘除,四加减,五移位千万别把鱼忘记,它在盛饭的厨子里小灯大灯灯灯不等爸喂鱼,舅疑惑,裸鸡也疑惑十三姨,十四父,十五逗,兜到低 解释为:“圆下箭头一顿号”指的是第15级的运算符。正在装载数据……其中圆指的是运算符(),下指的是下标运算符,箭头指的是指向结构体成员运算符-》,顿号指的是结构体成员运算符、 “非凡增减富强针地长”指的是第14级的运算符。其中非指的是逻辑运算符!,凡指的是按位取反运算符~,增减指的是自增和自减运算符++和--,富指的是负号运算符-,强指的是类型转换运算符(类型),针指的是指针运算符*,地指的是地址运算符&,长指的是长度运算符Sizeof“三乘除,四加减,五移位” 指的是第13级到第11级的运算符。其中三四五并无实际意义,只是起区分级别而已。也可以想象三指的是第13级运算符。乘除指的是乘法运算符*和除法运算符/,加减指的是加法运算符+和减法运算符-,移位指的是左移运算符《《和右移运算符》》“千万别把鱼忘记,它在盛饭的厨子里”指的是求余运算符%,它位于盛饭的厨子里,即指和乘法运算符、除法运算符在一起。“小灯大灯灯灯不等” 指的是第10级到第9级的运算符。其中小灯大灯指的是关系运算符《、《=、》和》=,灯灯指的是等于运算符==,不等指的是不等于运算符!=“爸喂鱼,舅疑惑,裸鸡也疑惑”指的是第8级到第4级的运算符。其中,爸喂鱼之指的是第8级的按位与运算符&,舅疑惑指的是第7级的按位异或运算符^和第6级的按位或运算符||,裸鸡也疑惑指的是第5级、第4级的逻辑与运算符&&和逻辑或运算符||“十三姨,十四父,十五逗,兜到低” 指的是第3级到第1级的运算符。其中,十三姨指的是条件运算符?: (三有双重含义,即指?:的优先级别是三,它的运算符类型也是三目,?难道不是姨即疑惑吗?),十四父的十四没有实际意义,父指的是赋值运算符=、+=、-=、*=、/=、%=、》》=、《《=、&=、 ^=和|= ,十五逗指的是第1级的运算符,兜到低指的是15级运算符以,结束。附录:C语言运算符及优先级优先级 运算符 含义 运算符类型 结合方向15 () 圆括号 单目 自左向右 下标运算符 —》 指向结构体成员运算符 、 结构体成员运算符 14 ! 逻辑非运算符 自右向左 ~ 按位取反运算符 ++ 自增运算符 -- 自减运算符 - 负号运算符 (类型) 类型转换运算符 * 指针运算符 & 地址运算符 Sizeof 长度运算符 13 * 乘法运算符 双目 自左向右 / 除法运算符 % 求余运算符 12 + 加法运算符 - 减法运算符 11 《《 左移运算符 》》 右移运算符 10 《、《=、》、》= 关系运算符 9 == 等于运算符 != 不等于运算符 8 & 按位与运算符 7 ^ 按位异或运算符 6 | 按位或运算符 5 && 逻辑与运算符 4 || 逻辑或运算符 3 ?: 条件运算符 三目 自右向左2 =、+=、-=、*=、 /=、%=、》》=、 《《=、&=、^=、|= 赋值运算符 双目 1 , 逗号运算符 双目 自左向右 ②括号成员第一; //括号运算符() 成员运算符. -》全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*&乘除余三,加减四; //这个"余"是指取余运算即%移位五,关系六; //移位运算符:《《 》》 ,关系:》 《 》= 《= 等等于(与)不等排第七; //即== !=位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|) "三分天下"八九十; 逻辑或跟与 //逻辑运算符:|| 和 &&十二和十一; //注意顺序:优先级(||) 底于 优先级(&&) 条件高于赋值, //三目运算符优先级排到 13 位只比赋值运算符和","高//需要注意的是赋值运算符很多!逗号运算级最低! //逗号运算符优先级最低由于C语言的运算符优先级与C++的不完全一样(主要是增加了几个运算符),所以这个口诀不能完全实用于C++.但是应该能够兼容,大家可以比较一下他们的区别应该就能够很快掌握C++的优先级的! ((*strDest++=*strSrc++)!=’\0’); :重点:++后增运算符优先级高于*1.*strDest++相当于 *(strDest++)2.由于是后自增,故执行顺序为: *strDest=*strSrc strDest++ strsrc++ //该级顺序不明 将*strDest与’\0’比较 //即,整个表达式的值为*strDest与’\0’的比较结果值得注意的是,对于赋值表达式,表达式本身的值等于左边子表达式的值。通过以上深入的分析,我们知道这个表达式完成了以下多个功能: 1.对于指针strDest, strSrc,将strSrc所指的内存空间的值赋给由strDest所指的内存空间。 2.判断赋值后的strDest所指的内存空间的指是否等于0。 3.对于指针strDest,strSrc,他们的值分别加1,即指向下一个元素。即:该表达式实现了以下三个功能: 1.对于指针strDest, strSrc,将strSrc所指的内存空间的值赋给由strDest所指的内存空间。 2.判断赋值后的strDest所指的内存空间的值是否等于0。 3.对于指针strDest,strSrc,他们的值分别加1,即指向下一个元素。
运算符和表达式之间有什么联系
2.6 运算符 C语言的内部运算符很丰富,运算符是告诉编译程序执行特定算术或逻辑操作的符号。C语言有三大运算符:算术、关系与逻辑、位操作。另外, C还有一些特殊的运算符,用于完成一些特殊的任务。2.6.1 算术运算符 表2 - 5列出了C语言中允许的算术运算符。在C语言中,运算符“ +”、“-”、“*”和“ /”的用法与大多数计算机语言的相同,几乎可用于所有C语言内定义的数据类型。当“ /”被用于整数或字符时,结果取整。例如,在整数除法中, 1 0 / 3 = 3。 一元减法的实际效果等于用- 1乘单个操作数,即任何数值前放置减号将改变其符号。模运算符“%”在C语言中也同它在其它语言中的用法相同。切记,模运算取整数除法的余数,所以“%”不能用于float和double类型。表2-5 算术运算符运算符 作用 运算符 作用 - 减法,也是一元减法 % 模运算 + 加法 -- 自减(减1) * 乘法 ++ 自增(增1) / 除法 下面是说明%用法的程序段。int x,y;x = 10;y = 3;printf("%d",x/y); /* 显示3 */printf("%d",x%y) ; /* 显示1 ,整数除法的余数* /x = 1 ;y = 2 ;printf("%d,%d",x/y,x%y) ; /* 显示0,1 */最后一行打印一个0和一个1,因为1 / 2整除时为0,余数为1,故1 % 2取余数1。2.6.2 自增和自减 C语言中有两个很有用的运算符,通常在其它计算机语言中是找不到它们的—自增和自减运算符, + +和- -。运算符“ + +”是操作数加1,而“- -”是操作数减1,换句话说:x = x + 1 ; 同+ + x ; x = x - 1 ; 同- - x ;自增和自减运算符可用在操作数之前,也可放在其后,例如: x = x + 1;可写成+ + x;或x + +;但在表达式中这两种用法是有区别的。自增或自减运算符在操作数之前, C语言在引用操作数之前就先执行加1或减1操作;运算符在操作数之后, C语言就先引用操作数的值,而后再进行加1或减1操作。请看下例:x = 1 0;y = ++x;此时,y = 11。如果程序改为:x = 10 ;y = x++ ;则y = 10。在这两种情况下, x都被置为11,但区别在于设置的时刻,这种对自增和自减发生时刻的控制是非常有用的。 在大多数C编译程序中,为自增和自减操作生成的程序代码比等价的赋值语句生成的代码要快得多,所以尽可能采用加1或减1运算符是一种好的选择。下面是算术运算符的优先级:最高 ++、-- -(一元减) *、/、%最低 +、- 编译程序对同级运算符按从左到右的顺序进行计算。当然,括号可改变计算顺序。C语言处理括号的方法与几乎所有的计算机语言相同:强迫某个运算或某组运算的优先级升高。2.6.3 关系和逻辑运算符 关系运算符中的“关系”二字指的是一个值与另一个值之间的关系,逻辑运算符中的“逻辑”二字指的是连接关系的方式。因为关系和逻辑运算符常在一起使用,所以将它们放在一起讨论。 关系和逻辑运算符概念中的关键是True(真)和Flase(假)。C语言中,非0为True,0为Flase。使用关系或逻辑运算符的表达式对Flase和Ture分别返回值0或1 (见表2 - 6 )。表2-6 关系和逻辑运算符关系运算符 含义 关系运算符 含义 》 大于 《= 小于或等于 》= 大于等于 == 等于 《 小于 != 不等于 逻辑运算符 含义 && 与 || 或 ! 非 表2 - 6给出于关系和逻辑运算符,下面用1和0给出逻辑真值表。关系和逻辑运算符的优先级比算术运算符低,即像表达式10》1+12的计算可以假定是对表达式10》( 1 + 12)的计算,当然,该表达式的结果为Flase。在一个表达式中允许运算的组合。例如:10》5&&!(10《9)||3《=4p q p&&q p||q !p 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 1 1 1 0 这一表达式的结果为True。下表给出了关系和逻辑运算符的相对优先级:最高 ! 》= 《= == != &&最低 ||同算术表达式一样,在关系或逻辑表达式中也使用括号来修改原计算顺序。切记,所有关系和逻辑表达式产生的结果不是0就是1,所以下面的程序段不仅正确而且将在屏幕上打印数值1。int x;x = 100;printf("%d",x》10);2.6.4 位操作符与其它语言不同,C语言支持全部的位操作符( Bitwise Operators)。因为C语言的设计目的是取代汇编语言,所以它必须支持汇编语言所具有的运算能力。位操作是对字节或字中的位(bit)进行测试、置位或移位处理,这里字节或字是针对C标准中的char和int数据类型而言的。位操作不能用于float、double、long double、void或其它复杂类型。表2 - 7给出了位操作的操作符。位操作中的AND、OR和NOT(1的补码)的真值表与逻辑运算等价,唯一不同的是位操作是逐位进行运算的。表2-7 位操作符操作符 含义 操作符 含义 & 与(AND) ~ 1的补(NOT) | 或(OR) 》》 右移 ^ 异或(XOR) 《《 左移 下面是异或的真值表。表2-8 异或的真值表p q p^q 0 0 0 1 0 1 1 1 0 0 1 1 如表2 - 8所示,当且仅当一个操作数为True时,异或的输出为True,否则为Flase。 位操作通常用于设备驱动程序,例如调制解调器程序、磁盘文件管理程序和打印机驱动程序。这是因为位操作可屏蔽掉某些位,如奇偶校验位(奇偶校验位用于确保字节中的其它位不会发生错误通常奇偶校验位是字节的最高位)。 通常我们可把位操作A N D作为关闭位的手段,这就是说两个操作数中任一为0的位,其结果中对应位置为0。例如,下面的函数通过调用函数read_modem( ),从调制解调器端口读入一个字符,并将奇偶校验位置成0。Char get_char_from_modem(){ char ch; ch=read_modem(); /*从调制解调器端口中得到一个字符* / return(ch&127);} 字节的位8是奇偶位,将该字节与一个位1到位7为1、位8为0的字节进行与操作,可将该字节的奇偶校验位置成0。表达式ch&127正是将ch中每一位同127数字的对应位进行与操作,结果ch的位8被置成了0。在下面的例子中,假定c h接收到字符"A"并且奇偶位已经被置位。 奇偶位 ↓ 110000001 内容为‘A’的c h,其中奇偶校验位为1 011111111 二进制的127执行与操作 & 与操作 ----------- =010000001 去掉奇偶校验的‘A’ 位操作OR与AND操作相反,可用来置位。任一操作数中为1的位将结果的对应位置1。如下所示,128|3的情况是: 1000000 128的二进制 0000011 3的二进制 | 或操作 ---------- =1000011 结果 异或操作通常缩写为XOR,当且仅当做比较的两位不同时,才将结果的对应位置位。如下所示,异或操作127 ^ 12 0的情况是: 01111111 127 的二进制 01111000 120 的二进制 ^ 异或操作 --------- =00000111 结果 一般来说,位的AND、OR和XOR操作通过对操作数运算,直接对结果变量的每一位分别处理。正是因为这一原因(还有其它一些原因),位操作通常不像关系和逻辑运算符那样用在条件语句中,我们可以用例子说明这一点:假定X = 7,那么x && 8为Ture( 1 ) ,而x & 8却为Flase( 0 )。 记住,关系和逻辑操作符结果不是0就是1。而相似的位操作通过相应处理,结果可为任意值。换言之,位操作可以有0或1以外的其它值,而逻辑运算符的计算结果总是0或1。 移位操作符》》和《《将变量的各位按要求向或向左移动。右移语句通常形式是: variable 》》右移位数 左移语句是: variable 《《 左移位数 当某位从一端移出时,另一端移入0(某些计算机是送1,详细内容请查阅相应C编译程序用户手册)。切记:移位不同于循环,从一端移出的位并不送回到另一端去,移去的位永远丢失了,同时在另一端补0。 移位操作可对外部设备(如D/A转换器)的输入和状态信息进行译码,移位操作还可用于整数的快速乘除运算。如表2 - 9所示(假定移位时补0),左移一位等效于乘2,而右移一位等效于除以2。表2-9 用移位操作进行乘和除字符x 每个语句执行后的x x的值 x=7 00000111 7 x《《1 00001110 14 x《《3 01110000 112 x《《2 11000000 192 x》》1 01100000 96 x》》2 00011000 24 每左移一位乘2,注意x 《 《 2后,原x的信息已经丢失了,因为一位已经从一端出,每右移一位相当于被2除,注意,乘后再除时,除操作并不带回乘法时已经丢掉的高位。 反码操作符为~。~的作用是将特定变量的各位状态取反,即将所有的1位置成0,所有的0位置成1。 位操作符经常用在加密程序中,例如,若想生成一个不可读磁盘文件时,可以在文件上做一些位操作。最简单的方法是用下述方法,通过1的反码运算,将每个字节的每一位取反。 原字节 00101100 第一次取反码 11010011 第二次取反码 00101100 注意,对同一行进行连续的两次求反,总是得到原来的数字,所以第一次求反表示了字节的编码,第二次求反进行译码又得到了原来的值。可以用下面的函数encode( )对字符进行编码。char encode(ch)char ch;{ return (~ch);}2.6.5 ?操作符 C语言提供了一个可以代替某些if - then - else语句的简便易用的操作符?。该操作符是三元的,其一般形式为:EXP1? EXE2: EXP3EXP1,EXP2和EXP3是表达式,注意冒号的用法和位置。 操作符“?”作用是这样的,在计算EXP1之后,如果数值为True,则计算EXP2,并将结果作为整个表达式的数值;如果E XP1的值为Flase,则计算EXP3,并以它的结果作为整个表达式的值,请看下例: x = 10; y = x》 9? 100: 200; 例中,赋给y的数值是100,如果x被赋给比9小的值,y的值将为200,若用if - else语句改写,有下面的等价程序: x = 10; if(x》9) y=100; else y=200; 有关C语言中的其它条件语句将在第3章进行讨论。2.6.6 逗号操作符 作为一个操作符,逗号把几个表达式串在一起。逗号操作符的左侧总是作为void(无值),这意味着其右边表达式的值变为以逗号分开的整个表达式的值。例如: x = ( y = 3 , y + 1 ) ; 这行将3赋给y,然后将4赋给x,因为逗号操作符的优先级比赋值操作符优先级低,所以必须使用括号。 实际上,逗号表示操作顺序。当它在赋值语句右边使用时,所赋的值是逗号分隔开的表中最后那个表达式的值。例如,y = 10;x = (y = y - 5 , 2 5 / y ) ;执行后,x的值是5,因为y的起始值是1 0,减去5之后结果再除以2 5,得到最终结果。 在某种意义上可以认为,逗号操作符和标准英语的and是同义词。2.6.7 关于优先级的小结表2 - 1 0列出了C语言所有操作符的优先级,其中包括将在本书后面讨论的某些操作符。注意,所有操作符(除一元操作符和?之外)都是左结合的。一元操作符( *,&和-)及操作符“?”则为右结合。表2-10 C语言操作符的优先级最高级 () → !~ ++ -- -(type) * & sizeof * / % + - 《《 》》 《= 》= == != & ^ | && || ? = += -= *= /=最低级,2.7 表达式 表达式由运算符、常量及变量构成。C语言的表达式基本遵循一般代数规则,有几点却是与C语言紧密相关的,以下将分别加以讨论。2.7.1 表达式中的类型转换 混合于同一表达式中的不同类型常量及变量,应均变换为同一类型的量。C语言的编译程序将所有操作数变换为与最大类型操作数同类型。变换以一次一操作的方式进行。具体规则如下:1 ) 所有char及short int 型量转为int型,所有float转换为double。 2) 如操作数对中一个为long double ,另一个转换为long double。① 要不然,一个为double,另一个转为doub le。② 要不然,一个为long,另一个转为long。③ 要不然,一个为unsigned,另一个转为unsigned。 一旦运用以上规则。每一对操作数均变为同类型。注意,规则2 )有几种必须依次应用的条件。 图2 - 1示出了类型转换。首先, char ch转换成int,且floatf 转换成double;然后ch /i的结果转换成doubl e,因为f * d是double;最后由于这次两个操作数都是double,所以结果也是double。.2.7.2 构成符cast 可以通过称为cast的构成符强迫一表达式变为特定类型。其一般形式为: (type)expression ( type)是标准C语言中的一个数据类型。例如,为确保表达式x / 2的结果具有类型float,可写为: (float)x / 2 通常认为cast是操作符。作为操作符, cast是一元的,并且同其它一元操作符优先级相同。 虽然cast在程序中用得不多,但有时它的使用的确很有价值。例如,假设希望用一整数控制循环,但在执行计算时又要有小数部分。main(){ int i; for(i+1;i《=100;++i) printf("%d/2 is :%f",i,(float)i/2);} 若没有cast( float),就仅执行一次整数除;有了cast就可保证在屏幕上显示答案的小数部分。2.7.3 空格与括号 为了增加可读性,可以随意在表达式中插入tab和空格符。例如,下面两个表达式是相同的。 x = 10 / y *( 127 / x ); x = 10 / y *( 127 / x ); 冗余的括号并不导致错误或减慢表达式的执行速度。我们鼓励使用括号,它可使执行顺序更清楚一些。例如,下面两个表达式中哪个更易读一些呢? x = y / 2 - 34 * temp & 127; x = ( y / 2 ) - ( ( 34 * temp) & 127);2.7.4 C语言中的简写形式 C语言提供了某些赋值语句的简写形式。例如语句: x = x + 10; 在C语言中简写形式是: x + = 10; 这组操作符对+ =通知编译程序将X + 1 0的值赋予X。这一简写形式适于C语言的所有二元操作符(需两个操作数的操作符)。在C语言中,variable=variable1 operator expression;与variable1 operator=expression相同。 请看另一个例子: x = x - 1 0 0 ; 其等价语句是 x - = 100; 简写形式广泛应用于专业C语言程序中,希望读者能熟悉它。
定义运算的原理是什么
定义运算,即定义新运算,指用一个符号和已知运算表达式表示一种新的运算。就是用一种特定的符号表示特定的运算,它使用一些特殊的运算符号,如*、∆、※、☆、★、◎等,这与四则运算中的+、-、×、÷是不一样的。
解答定义新运算,关键是要正确理解新定义的算式含义,严格按照新定义的计算顺序,将数值代入算式中,再把它转化成我们熟知的加、减、乘、除运算,然后进行计算。新定义的运算中有括号的,要先算括号里的。
扩展资料:
例题介绍定义新运算:
例题:已知a⊙b=a×b-(a+b),试求6⊙(4⊙3)。
原理:新运算被定义为:a*b等于a乘以b减去两数之和。在定义新运算中同样规定了要先算小括号里的。因此,在6⊙(4⊙3)中,就要先算小括号里的(4⊙3)。
详解:因为4⊙3 =4×3-(4+3)= 12-7=5
所以6⊙(4⊙3) =6×5-(6+5) =30-11=19
C语言的运算符和表达式有什么区别
两个操作都是自增操作,都只能对变量进行该操作,但是两种自增有些许区别:
1、++x先将x的值自增1,然后再在当前表达式中使用x的值。
2、x++先在当前表达式中使用x的值,然后再将x的值自增1。
例如inty=3,x=6。那么
++x+y=(6+1)+3=10,运算结束后x=7。
x+++y=6+3=9,运算结束后x=7。
运算特点
C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。
当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则就会显得十分重要。
C语言,逻辑运算的理解,他是基于一个什么的原理
有些运算中,当已知其中一个运算数是某个值时,它的计算结果就可以直接确定了,而与另一个运算数无关。这样的性质通常描述为: 任何数,与某个数进行某种运算,结果都是某个数。例如: 任何数,乘以0,结果都是0;同样,对于逻辑运算: 任何逻辑值,和“假”进行与运算,结果都是“假”; 任何逻辑值,和“真”进行或运算,结果都是“真”;用公式表示就是: p&&0=0&&p=0; p||1=1||p=1;所以,在我们进行人工计算时,如果遇到这种情形,就可以利用这条性质,直接写出结果;同样,对于计算机,在遇到这种情形时,也无须计算第二个操作数。 而编译器通常是按照从左到右的次序分析源程序的,所以总是左边的操作数先被确定,即任何情况下,左边的操作数肯定会被计算;而右边的,就有可能被忽略了。
C语言中表达式是如何运算的那些运算符什么意思
表达式在编译时,计算机是这么理解的,先把表达示全部压入栈内,然后再弹出,如果发现弹出的是运算符,则等到再弹出另一个运算符,比较两个运算符的优先级,如果前者优先或同级的话,则将运算符的前一个出栈数和后一个出栈数进行该运算符的运算,然后把运算结果入栈;如果优先级小的话,则再继续弹出栈顶元素.直到有一个运算符被运算,并且结果入栈,然后把未使用的出栈数和出栈运算符,按出栈的先后再次入栈(先出后入,后出先入).最后整个表达示得出结果.这个过程一般被理解为按右结合.比如表达示:x=x*x+4^y+5+6+7x=3;则x的求值过程为:x=4*4+4^2+5+13x=x*x+4^2+18x=x*x+34x=9+34x=43赋值运算符的优先级一般最小,是最后计算的.所以得出43的值再赋值给x-=,+=,*=,/=也算是赋值运算符,他们叫做复合运算符,和赋值运算符同一优先级,按右结合原则运算.我再补充一点吧以下全部引用自:(《《C语言编程宝典》》)各个运算符: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符 作用 ———————————————————————————— + 加, 一目取正 - 减, 一目取负 * 乘 / 除 % 取模 -- 减1 ++ 加1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符 作用 ————————————————————————————— && 逻辑与 || 逻辑或 ! 逻辑非 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符 作用 ————————————————————————————— 》 大于 》= 大于等于 《 小于 《= 小于等于 == 等于 != 不等于 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符 作用 ———————————————————————————— & 位逻辑与 | 位逻辑或 ^ 位逻辑异或 - 位逻辑反 》》 右移 《《 左移 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Turbo C运算符的优先次序 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━ 表达式 ┃优先级 ————————————————————————————╂———— ()(小括号) (数组下标) .(结构成员) -》(指针型结构成员)┃ 最高 ————————————————————————————┃ ↑ !(逻辑非) .(位取反) -(负号) ++(加1) --(减1) &(变量地址)┃ │ ————————————————————————————┃ │ *(指针所指内容) type(函数说明) sizeof(长度计算) ┃ │ ————————————————————————————┃ │ *(乘) /(除) %(取模) ┃ │ ————————————————————————————┃ │ +(加) -(减) ┃ │ ————————————————————————————┃ │ 《《(位左移) 》》(位右移) ┃ │ ————————————————————————————┃ │ 《(小于) 《=(小于等于) 》(大于) 》=(大于等于) ┃ │ ————————————————————————————┃ │ ==(等于) !=(不等于) ┃ │ ————————————————————————————┃ │ &(位与) ┃ │ ————————————————————————————┃ │ ^(位异或) ┃ │ ————————————————————————————┃ │ |(位或) ┃ │ ————————————————————————————┃ │ &&(逻辑与) ┃ │ ————————————————————————————┃ │ ||(逻辑或) ┃ │ ————————————————————————————┃ │ ?:(?表达式) ┃ │ ————————————————————————————┃ │ = += -=(联合操作) ┃ │ ————————————————————————————┃ │ ,(逗号运算符) ┃ 最低 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Python教程:第19篇 逻辑运算符
我们在高一时学习过命题的逻辑运算:与、或、非,在计算机科学中,其运算规则也是类似的(基本原理相同,但操作数与返回结果有所不同),Python也不例外。
在Python中,与用and、或用or、非用not表示。逻辑运算符一般用于操作返回值为bool类型的表达式,以表达式的值True(真)和False(假)为例。其运算规则总览如下:
需要特别注意的是,在Python中,虽然逻辑运算符的操作数一般是运算结果为逻辑值的表达式,但也可以是运算结果为数值、字符串、元组、列表、集合、字典等类型的表达式。返回值也不一定是逻辑(bool)类型。而有些教程错误地称只能操作bool类型的表达式以及始终返回bool类型。
我们可以用两个not查看某种数据等价的逻辑值,下面是一些常见数据类型的等价规则:
一、数值除了0视为False,其余数值(包括小数、负数、复数)均视为True:
二、字符串除了空字符串视为False外,其余均视为True(包括空格、制表、换行、回车等空白符,也包括字符串’False’):
三、对于元组、列表、集合、字典也是如此,空的视为False,非空的均视为True,即使其中只有一个值为False或0的数据:
有一种情况容易产生误解,就是使用小括号将False包围起来,这其实也是表示bool值,而不是元组,元组是使用小括号包围的数据列表,但是如果只有一个成员,数据后面要加一个逗号,正如上述示例中所示那样,下面的示例显示了小括号包围的False的数据类型:
四、对于一个类也是如此,非空类视为True(注:无法创建什么都不包含的空类):
五、None视为False:
总结一下就是: 数值0、空字符串、空元组、空列表、空集合、空字典以及None,均视为逻辑值False,其余均视为True。
需要注意的是,逻辑运算符的返回值不一定是bool类型。
了解了非bool类型的操作数等价的逻辑值之后,还需要了解逻辑运算符的完全运算规则,才能得知具体会返回什么值。
and为逻辑与(也称逻辑且),其使用语法如下:
表达式A and 表达式B
其中操作数表达式A和表达式B一般均为逻辑值。但也可以是数值、字符串、元组、列表、集合、字典、对象等类型。
其运算通用规则为: 如果 表达式A 的运算结果等价于False,返回其运算结果,不再计算表达式B。否则返回 表达式B 的运算结果。
对于最常用的两个操作数均为逻辑值的情况,只有当两个操作数均为True的情况下为True,其余情况均为False,以下是所有四种可能情况的运行示例:
其中两个操作数也都可以是非逻辑值。
当第1个操作数结果等价于False时,比如False、0、None、空字符串、空元组、空列表、空集合、空字典等,整个逻辑表达式返回第1个操作数,注意,返回的是操作数的原始值,而不是等价值False,下面是运行示例(None表示什么也没有,所以没有输出。set()返回空集合):
当第1个操作数等价于True时(非数值0、非空字符串等都等价于True),则不管第2个表达式的返回值是什么,都将返回第2个值,当然这时第2个表达式不能有语法错误:
or为逻辑或,其使用格式如下:
表达式A or 表达式B
其中操作数表达式A和表达式B与and中的操作数含义相同。
其运算通用规则为: 如果 表达式A 的运算结果等价于True,返回其运算结果,不再计算表达式B。否则返回 表达式B 的运算结果。 其与and的区别在于,or当表达式A为True则返回表达式A,and当其为False时返回表达式A。
以上面and的示例为模板,可以看到,or与and的返回值正好相反。
与and类似,当表达式A相当于True时,表达式B也不会计算:
下面是常见的两个操作数均为逻辑值的情况,or运算符的四种可能情况的运行示例(除非两个值都是False时返回False,其余情况返回True):
not为逻辑非,其使用格式如下:
not 表达式
其运算规则为: 当 表达式 的运算结果为False、0、None、空字符串、空元组、空列表、空集合、空字典时,返回True。其余情况均返回False。
下面是一些不同数据类型的运算示例:
与and和or不同的是,not的返回值始终是bool类型,即只有True和False两种可能的取值。
所以,可以使用not not 表达式来查看一个非逻辑值是等价True还是False,正如上文非逻辑操作数等价的逻辑值中所示的那样。
当然,not最常用的用法还是逆转逻辑值,下面是两种可能情况的运行示例:
逻辑运算符优先级not》and》or。
下面的示例证明and先于or运算:
下面的示例证明not先于or运算:
下面的示例证明not先于and运算:
另外,所有的逻辑运算符都比元组逗号分隔符的优先级要高,以and为例,比如下面是一个元组:
下面的例子中:
先计算了3 and 4,然后再组合成了元组,相当于:
而不是:
not与or的优先级也比其要高,下面是示例:
所以虽然元组有时可以省略小括号,但在与逻辑运算符运算时,元组请始终使用小括号。
这篇文章的整理与编写花费了我近十小时时间,从上午写到晚上。是我目前最具匠心的文章,如果说以前我的文章只适合初学者,偶尔超水平发挥才适合中级学者,那么这篇文章我感觉对高水平人员也有重要的参考意义。
就我目前所知,我所写的教程,在全网找不到第二个比它更优秀的了,当然,每个人心中都有一杆称,不同读者可能也有不同的际遇,我能做的只是做好自己。
所以,如果你觉得此文不错,可以分享给你身边的朋友、同学、同事、同乡,世界很大也很小,很多东西,初见只能依靠缘分。而再见就需要你的主动了,缘分天注定,努力亦可改变命运。
Python教程:第11篇 变量赋值
Python教程:第17篇 比较运算符
Python教程:第18篇 算术运算符
更多文章:
三国群英传单机游戏下载(三国群英传2原版安卓单机版在哪里下载)
2024年8月27日 01:35
交管12123最新版本下载(12123交罚款时显示手机版本过低)
2024年7月28日 20:01
为什么FC游戏普遍难度很大?如果设计一款游戏,极难积攒足够的资源以打败系统如果是你的话,会怎么玩
2023年8月17日 18:20
如何查公交车实时到站信息?怎么在苹果手机中查找到公交车到站时间
2024年8月30日 13:50
北京帮推客科技发展有限公司怎么样?加入爱茉尔帮推客源是真的吗
2024年7月15日 11:47
学校排课系统有什么好处有哪些值得推荐的排课系统?兴文排课系统收费吗
2024年5月28日 04:33
摩托车比赛有女选手吗?摩托车比赛中,选手为什么要趴伏在摩托车上
2024年6月27日 21:47