逗号运算符是二元运算符?

cornz 2012-10-14 03:38:55
不能有三个操作数,对否?
...全文
263 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alexander 2012-10-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
初始化语句≠赋值语句。
初始化语句,有序列点。
而赋值语句,就没有序列点。
对否?
[/Quote]
严格的说,C/C++中并没有“语句”的概念,存在的只有表达式。C/C++表达式中有三种是具有“语句”特性的:声明表达式(初始化其实是声明表达式的一部分)、控制表达式(比如if、else、for、break、goto等等)、预编译表达式。

以上三种表达式没有返回值、不能作为其它表达式的一部分存在、对格式有一定要求(例如声明表达式的各分项只能是赋值表达式)

赋值表达式也是一种普通表达式,和一般的表达式是一样的。
[Quote=引用 13 楼 的回复:]
x=x++;
这句语句,只有1个序列点。就是分号前。对否?
[/Quote]
在下没看过C标准的原文,但从读过的翻译资料来看是这样的。
crnoz 2012-10-15
  • 打赏
  • 举报
回复
x=x++;
这句语句,只有1个序列点。就是分号前。对否?
crnoz 2012-10-15
  • 打赏
  • 举报
回复
初始化语句≠赋值语句。
初始化语句,有序列点。
而赋值语句,就没有序列点。
对否?
wizard_tiger 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

逗号是操作符 并非运算符
逗号操作符没有几元这个概念,分割表达式的,
[/Quote]
++
建议楼主看一下《C和指针》
Alexander 2012-10-15
  • 打赏
  • 举报
回复
建议LZ不要纠结于序列点,这些知识点除了设计编译程序以外基本没用。

先把精力放在怎样写好程序上,如果将来有能力设计编译程序了再去钻研C语言标准吧。
Alexander 2012-10-15
  • 打赏
  • 举报
回复
初始化语句≠赋值语句。

初始化语句是指与声明同时进行的赋值操作,例如:
int a=1,b=a+1;
在a=1之后和b=a+1之后都有序列点。

注意,声明中的逗号不是逗号运算符,它只起分隔作用,没有返回值。
cornz 2012-10-15
  • 打赏
  • 举报
回复
7楼: 这本书还说:初始化语句。也是序列点! 初始化语句,也就是赋值语句了。那么,表达式语句,不只有3个序列点。它有3个赋值语句,一共有6个序列点! 对否?
Alexander 2012-10-15
  • 打赏
  • 举报
回复
感觉有点心寒……

“逗号是操作符 并非运算符”?
哪个老师教的?教C还是Java的?

C/C++的运算符表中都看得到吧:
逗号运算符是二元运算符,是C/C++中优先级最低的运算符(其优先级比赋值都低),运算顺序为自左向右,返回值为右操作数(即逗号右边的表达式)的值。

以LZ例子来说:
x=1,y=2,z=x+y
由于运算顺序为左向右,实际的运算顺序为:
(x=1,y=2),z=x+y
=>
2,z=x+y
返回值为3。

对于序列点(也叫顺序点),《C语言参考手册》上写得很清楚:
序列点出现在短路逻辑And(&&)、Or(||)、条件(?:)与逗号(,)运算符的第一个操作数之后(在下只摘了有用的一句)

可知
x=1,y=2,z=x+y;
有3个序列点:
分别在x=1之后,y=2之后和z=x+y之后(表达式结束时也有序列点)
cornz 2012-10-15
  • 打赏
  • 举报
回复
x=1,y=2,z=x+y;

这个表达式有多少个序列点?
它们在表达式的位置?
zzsstt09416232 2012-10-14
  • 打赏
  • 举报
回复
逗号是操作符 并非运算符
逗号操作符没有几元这个概念,分割表达式的,
zzsstt09416232 2012-10-14
  • 打赏
  • 举报
回复
逗号是操作符 并非运算符
逗号操作符没有几元这个概念,分割表达式的,
lin5161678 2012-10-14
  • 打赏
  • 举报
回复
int a[] = {(10,2),1,((4,9,9,6,4),123)};
sizeof a 的结果 和 3 * sizeof *a的结果是一样的
说明这个数组是3个元素
说明初始化列表只用3个值
这里 括号里面的 逗号就是逗号运算符
cornz 2012-10-14
  • 打赏
  • 举报
回复
《C语言核心技术》 第五章 表达式和运算符 运算符全面剖析 逗号运算符 “初始化列表”或“函数自变量列表”中的逗号其实不是逗号运算符。但是在这些地方,你还是可以使用逗号运算符,这个时候必须用括号。 ————————— 这句话是什么意思?给个实例!
半个灵魂 2012-10-14
  • 打赏
  • 举报
回复
逗号是操作符 并非运算符
逗号操作符没有几元这个概念,分割表达式的,
第六章 运算符与表达式 C运算符的分类: 算术运算符:+、-、*、/、%、++、-- 关系运算符;>、<、==、!=、>=、<= 逻辑运算符:&&、||、! 位操作运算符:位与&、位或|、位非~、位异或^、左移<<、右移>> 赋值运算符:=、复合算术运算赋值(+=、-=、*=、/=、%=)、复合位运算赋值(&=、|=、^=、<<=、>>=) 条件运算符:?: 逗号运算符:, 指针运算符:取地址&、取内容* 求字节数运算符:sizeof 其他运算符:()、下标[]、成员运算符(->、.) 6.1 概述 按运算符连接操作数分三类: 1.单目运算符:又称一元运算符,即只有一个操作数的运算符。负号-、正号+、自增++、自减--、非!、sizeof、指针运算符、部分位操作运算符。 2.双目运算符:又称二元运算符,连接两个操作数。大部分运算符属于此类。 3.三目运算符:连接三个操作数。C语言中唯一的三目运算符为条件运算符(?:)。 运算符有优先级和结合性。运算先后顺序受运算符的优先级和结合性制约。 表达式由常量、变量、函数和运算符组成。单个常量、变量、函数调用形式可看作表达式的特例,称为初等表达式。运算符左边的操作数称为左操作数,右边的叫右操作数。 6.2 算术运算 1.整数运算 加减乘除运算、单目运算符负号-将整数符号取反。求余运算符%计算整数相除所得的余数,如11%4为11/4的余数3。 a.整数运算结果为整数。整数相除返回整数部分,舍去小数部分,编译器不同舍入方法不同。11/4结果是2,1/3结果为0,1/5*5结果不为1。 b.除法运算中除数不能为0,求模运算操作数必须为整型,因此不能进行除零和模零运算。 c.运算符的执行顺序由优先级决定,单目运算符负号-优先级高于加减乘除,乘除优先级高于加减。 可以用括号运算符标明或改变计算顺序,括号中的表达式总是先执行。四则运算符为左结合。 2.实数运算:实数运算的结果为实型。 3.字符运算
西大成人教育计算机语言(VC)在线作业复习题全文共14页,当前为第1页。西大成人教育计算机语言(VC)在线作业复习题全文共14页,当前为第1页。计算机语言(VC) 复习资料 西大成人教育计算机语言(VC)在线作业复习题全文共14页,当前为第1页。 西大成人教育计算机语言(VC)在线作业复习题全文共14页,当前为第1页。 一.单选题(共23题,50.6分) 1 在类中说明的成员可以使用关键字的是( )。 Apublic Bextern Ccpu Dregister 正确答案: A 2 在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是( )。 A作为友元函数重载的一元运算符 B作为成员函数重载的一元运算符 C作为友元函数重载的二元运算符 D作为成员函数重载的二元运算符 正确答案: B 3 关于纯虚函数和抽象类的描述中,错误的是( )。 A纯虚函数是一种特殊的虚函数,它没有具体实现 B抽象类是指具有纯虚函数的类 C一个基类中说明有纯虚函数,该基类的派生类一定不是抽象类 D抽象类只能作为基类使用,其纯虚函数的实现由派生类给出 正确答案: A 4 编写C++程序一般需经过的几个步骤依次是( )。 A编辑、调试、编译、连接 B编辑、编译、连接、运行 C编译、调试、编辑、连接 D编译、编辑、连接、运行 正确答案: B 5 友元的作用是( )。 A提高程序的运行效率 B加强类的封装性 C实现数据的隐藏性 D增强成员函数的种类 正确答案: A 6 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体 也就是( )。 A类 B对象 C函数体 西大成人教育计算机语言(VC)在线作业复习题全文共14页,当前为第2页。西大成人教育计算机语言(VC)在线作业复习题全文共14页,当前为第2页。 D数据块 西大成人教育计算机语言(VC)在线作业复习题全文共14页,当前为第2页。 西大成人教育计算机语言(VC)在线作业复习题全文共14页,当前为第2页。 正确答案: A 7 下列二维数组定义,正确的是( )。 Aint a[5][]; Bint a[][5] Cint a[][3]={{1,3,5},{2}} Dint a[](10) 正确答案: C 8 一个类的友元函数或友元类能够通过成员操作符访问该类的( )。 A私有成员 B公有成员 C保护成员 D所有成员 正确答案: D 9 文件包含命令中被包含的文件的扩展名为( )。 A必须是.h B不能是.h C可以是.h或.cpp D必须是.cpp 正确答案: C 10 假定一个类的构造函数为A(int aa,int bb) {a=aa--;b=a*bb;},则执行A x(4,5);语句后 ,x.a和x.b的值分别为( )。 A3和15 B5和4 C4和20 D20和5 正确答案: C 11 决定C++语言中函数的返回值类型的是( )。 Areturn语句中的表达式类型 B调用该函数时系统随机产生的类型 C调用该函数时的主调用函数类型 D在定义该函数时所指定的数据类型 正确答案: D 12 程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用( )符号作为分隔符。 A空格或逗号 B逗号或回车 C逗号或分号 D空格或回车 西大成人教育计算机语言(VC)在线作业复习题全文共14页,当前为第3页。西大成人教育计算机语言(VC)在线作业复习题全文共14页,当前为第3页。正确答案: D 西大成人教育计算机语言(VC)在线作业复习题全文共14页,当前为第3页。 西大成人教育计算机语言(VC)在线作业复习题全文共14页,当前为第3页。 13 设有代码"struct BOOK{ char titile[40]; float price; }; 则下列不正确的变量定义语句是( )。 A BOOK book; B BOOK book={"C++编程",27.5}; C BOOK *x=new BOOK; D BOOK x=new BOOK; 正确答案: D 14 下面循环语句中内层循环的循环体S的执行总次数为( )。 for (int i=0; i
专为程序员打造的计算器,二进制运算强大,支持64位。 采用表达式驱动,输入表达式便即时显示结果,抛弃传统计算器繁琐的按钮,表达式可粘贴或回调重复使用。 支持二进制串直接运算,如0b1101 & 0b0011= 0b0001。 支持与、或、非、异或、移位(循环、逻辑、算术),直接读写二进制位,指定位段读、写、置1、清0、反转。 二进制数据表达方式多样,数据可以K、M、G等单位为后缀。 支持类C语言库函数调用。 结果可以各种进制、各种单位输出。 运算结果可存放在变量中。 内置常用生活函数。 总之,此计算器相当于解释执行的C语言表达式,但用起来更方便、更高效。 使用前请仔细阅读窗口内的帮助,便可成为开发工作中的好帮手。 [程序员二进制计算器 v1.36 帮助] 一 用法 在底部框中输入要计算的表达式,会即时显示计算结果,当无结果时说明表达式输入有误。 按回车键保存该次输入、清空输入框,并显示详细结果,包括可能有的错误信息。 在底部框中按键盘上、下箭头,可以调出历史输入。 当光标在结果框内时,按回车或TAB键可使光标跳至输入框。 二 特点 即时计算。 便捷的历史回调、复制、粘贴功能。 支持64位整型运算,整数有效范围为 -9223372036854775808 至 9223372036854774784。 三 数的表示 1-整型数表示法 如何表示二、八、十六进制整数: (1)二进制数 以0b或0B开头,后面的0、1数字之间可以用空格分隔。 0b1001 = 9 0b 1001 0110 = 0x96 = 150 0B1001 0110% = 150% = 1.5 (2)八进制数 以0开头: 010 = 8 027 + 7 = 23 + 7 = 30 (3)十六进制数 以0x或0X开头: 0x10 = 16 -0XabEF * 2 = -44015 * 2 = -88030 2-浮点数表示法 (1)小数点前后的省略表示 3.14 3. = 3.0 .14 = 0.14 (2)用科学计数法表示浮点数 3e2 = 300 3e+2 = 300 3e-2 = 0.03 3.e2 = 300 3.e+2 = 300 3.14e-2 = 0.0314 .14e+2 = 14 3-字符型表示法 支持字符常量,字符型自动转换为整型(值为该字符的ASCII码),支持C/C++转义字符。 如何得到字符的ASCII码: 'a' = 97 'A' = 65 'a' + 3 = 100 'a' - 'A' = 32 '\''=39 '\"' = '"' = 34 '\? = '?' = 63 '\\' = 92 '\a' = 7 '\b' = 8 '\f' = 12 '\n' = 10 '\r' = 13 '\t' = 9 '\v' = 11 4-量词后缀表示 一个数的后面,可以跟有倍率运算符,表示该数乘以相应的倍数,例如: 2w = 20000 (2万) 13y = 1300000000 (13亿) 4k = 4096 3% = 0.03 (百分之3) 详见“倍率运算”部分。 三 运算结果的输出格式 1-指定方法 格式: [格式前缀] 表达式 表达式前面可带有“格式前缀”(可选的),用来指定运算结果的输出格式。 “格式前缀”与C/C++的printf函数基本相同,但不支持%s或%S。 当省略格式前缀时,默认按%g方式输出。此时对较小的数按原样输出,较大的数按科学计数法输出。 2-整型的输出格式 当按二、八、十六进制输出时,是按其补码形式输出,最高位是符号位(正数为0、负数为1)。 所以此法可得到一个负数的补码表示。 (1)按二进制输出 %b或%B %b等价与%B。 %b 12 = 0b1100 %b 0xffffffff = 0b1111 1111 1111 1111 1111 1111 1111 1111 (2)按八进制输出 %o或%O %o等价与%O。 %o 10 = 012 (3)按十进制输出 %d 对于整型值,默认按十进制输出,此时%d可省略。 %d 123456789 = 123456789 (4)按十六进制输出 %x或%X 用%x时,字母abcdef输出为小写,用%X时,字母abcdef输出为大写。 %x 31 = 0x1f %X 31 = 0X1F (5)输出前的类型转换 对于浮点型值,用以上4种格式时,会先取整,再输出,因此它们可起到对结果取整的作用。 %d 12345.6789 = 12345 %d -12345.6789 = -12345 3-浮点型的输出格式 (1)按精简方式输出 %g %g是默认的输出格式(可省略),此时不输出无意义的0,当数较大时自动按科学计数法输出。 %g 314 = 314 %g 3.14000 = 3.14 %g 3.14 * 2 = 6.28 %g 1234567 = 1.23457e+006 (2)按全部位数输出 %f %f输出全部位,包括多余的0: %f 3.14 * 2 = 6.280000 (3)如何指定小数点后保留位数 %m.nf 格式:%m.nf 其中,m和n都是整数,m指定总位数,n指定小数点后保留几位,如果m或n不足,则按实际位数输出。 例1:指定小数点后保留2位,其余位四舍五入: %.2f 3.14159 = 3.14 例2:指定全部5位,且小数点后保留3位,其余位四舍五入: %5.3f 3.14159 = 3.142 4-字符型的输出格式 %c或%C 如何得到ASCII值对应的字符(ASCII值转换为字符): 用%c,使结果(仅支持整型值)按字符形式输出即可。 %c 65 = 'A' %C 100-3 = 'a' 5-智能大小输出格式 用于将一个较大或较小的、不易读的数,自动转换为易读的单位输出。 (1)以K、M、G、T、P、E为单位输出 %sz %sz对结果按1024为单位换算,用于快速计算磁盘文件的大小(sz是size的简写): 当结果=1K且=1M且=1G且=1T且=1P且=1E时,以E为单位输出,例如: %sz 10000000000000000000 = 8.673617E (2)以W(万)、Y(亿)、WY(万亿)、YY(亿亿)、WYY(万亿亿)、YYY(亿亿亿)为单位输出 %num %num对结果以万、亿等为单位输出,用于便捷得到一个大数的值,格式符合中国人的习惯: 当结果=1万且=1亿且=1万亿且=1亿亿且=1万亿亿且=1亿亿亿时,以亿亿亿为单位输出,例如: 围棋盘第1格放1粒米,以后每格放前一格2倍的米,一共需要多少粒米: %num 2**(18*18) = 3.41758e+073YYY (3)以kilo(千)、mil(百万)、bil(十亿)、tril(万亿)为单位输出 %val %val对结果按1000为倍率单位输出,用于便捷得到一个大数的值: 当结果=1千且=1百万且=十亿且=1万亿时,以万亿为单位输出,例如: %val 519322y = 51.9322tril (2012年国内生产总值,y是后缀运算符,表示前值乘以1亿) 6-固定比例输出格式 (1)按百分比输出 %2 %2将结果按百分比格式输出,例如: 对150种食品进行抽查,仅105种合格,合格率是多少: %2 105/150 = 70% (2)按万分比输出 %4 %4将结果按万分比格式输出,例如: %4 0.00314 = 31.4%% 四 运算符与函数 1-运算符与分类 所有运算符,一律不区分大小写。 (1)一元运算符 只有1个操作数的运算符。 如果操作数是一个常数,它不需要用括号括起,并且与运算符之间不需要空格分隔,如: sqr2 = 1.41421 cos0 = 1 当操作数是表达式时,需要用括号括起,以划分优先级: sqr(1 + 2) = 1.73205 当操作数是一个内置常量时,它与运算符之间要有空格分隔: cos pi = -1 对少数一元运算符,按书写习惯放在了操作数的后面,如阶乘!和百分比% 3! = 6 3% = 0.03 (2)二元运算符 需要2个操作数的运算符,如+ - * /。 (3)三元运算符 需要3个操作数的运算符,如条件运算符 ?: 。 2-内置函数 调用格式:函数名(参数1, 参数2, ...) 其中,所有函数名不区分大小写。 函数名后是用一对括号括起的参数列表,各参数间用逗号分隔。 每个参数可以是一个数值,也可以是复杂表达式。 参数个数必须符合该函数的定义,部分函数支持无穷多个参数(sum, ave, max, min)。 整个函数调用又是个表达式(值为函数的返回值),又可以参与构成其它表达式。 五 基本运算 1-四则运算 (1)加 + 3 + 2 = 5 (2)减 - 3 - 2 = 1 (3)乘 * 3 * 2 = 6 (4)除 / 除数不能为0。 3 / 2 = 1.5 (5)求余 mod 除数不能为0,支持对浮点数求余。 5 mod 3 = 2 5.2 mod 3.1 = 2.1 6.28 mod 1.5 = 0.28 2-等比运算 格式为 a : b = c : ? 整个表达式的值为“使等式成立的问号处”的值。这里冒号的含义等于除号。 例子:商场里100元的衣服,打折后卖75元, 则另一件150元的衣服,同样打折后卖多少? 写出表达式 100:75=150:?,结果为112.5 3-取整 (1)下取整 floor 返回不大于x的最大整数: floor2.8 = 2 floor-2.8 = -3 (2)上取整 ceil 返回不小于x的最小整数: ceil2.8 = 3 ceil-2.8 = -2 4-求绝对值 abs abs-3.14 = 3.14 abs(3 - 5) = 2 5-求阶乘 ! 操作数不能小于0,或大于100。 3! = 6 (3!)! = 6! = 720 6-倍率运算 一个表达式的后面,可以跟有倍率运算符,表示该表达式的值乘以相应的倍数。 此法在表示一个大数或特定数时,可以减少书写量。 (1)存储单位后缀运算符 K M G T P E 4k = (480/120)k = 4*1024 = 4096 2m = (2k)k = 2*1024*1024 = 2097152 4g = (2+2)g = 4*1024*1024*1024 = 4294967296 1t = 1024*1024*1024*1024 = 1099511627776 1p = 1024*1024*1024*1024*1024 = 1125899906842624 1e = 1024*1024*1024*1024*1024*1024 = 1152921504606847000 (2)数量后缀运算符一 w y wy yy wyy yyy 2w = 20000 (万) 13y = 1300000000 (亿) 1wy = (1w)y = 10000y = 1e+012 (万亿) 1yy = (1y)y = 1e+016 (亿亿) 1wyy = ( (1w) y )y = 1e+020 (万亿亿) 1yyy = ( (1y) y )y = 1e+024 (亿亿亿) (3)数量后缀运算符二 kilo mil bil tril 11.034kilo = 11.034 * 1000 = 11034 (千) 1.392mil = 1.392 * 100w = 1392000 (百万) 1.35382bil = 1.35382 * 10y = 1353821000 (十亿) 51.9322tril = 51.9322wy = 5.19322e+013 (万亿) (4)比率后缀运算符 % %% 求百分比 % 3% = 0.03 (500%)% = 5% = 0.05 500% mod 3 = 5 mod 3 = 2 求万分比 %% 12345%% = (12345%)% = 123.45% = 1.2345 7-幂运算、指数运算 (1)求平方根 sqr sqr2 = 1.41421 sqr(1 + 2) = 1.73205 (2)求X的Y次方 ** 幂运算,支持浮点数: 4 ** 3 = 4 * 4 * 4 = 64 2.5 ** 1.5 = 3.95285 (3)求e的x次方 exp exp1.5 = e ** 1.5 = 4.48169 8-对数运算 (1)求以2为底的对数 lg lg2 = 1, lg(2 * 2 * 2) = 3 (2)求以10为底的对数 ln ln10 = 1 ln(10 * 10) = 2 (3)求以e为底的对数 log log e = 1 log(e * e) = 2 9-取负 - -3.14 * -(1+2) = -3.14 * -3 = 9.42 5--3 = 5 - (-3) = 5 + 3 = 8 5--(-3) = 5 - (-(-3)) = 5 - 3 = 2 六 二进制运算 1-位与 & 0b1111 & 0b1001 = 15 & 9 = 0b1001 = 9 2-位或 | 0b1100 | 0b0011 = 12 | 3 = 0b1111 = 15 3-位取反 ~ ~( -2 ) = ~ 0b1111 1111 1111 1111 1111 1111 1111 1110 = 1 (32位版本) ~( -2 ) = ~ 0b1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110 = 1 (64位版本) 4-异或 ^ 0b1111 ^ 0b1001 = 15 ^ 9 = 0b0110 = 6 5-移位运算 (1)左移 << 0b0001 << 2 = 1 <> 0b1100 >> 2 = 12 >> 2 = 0b0011 = 3 注:这里是采用逻辑右移还是算术右移,由系统决定。 如果确定做逻辑右移,请用下面的rshl运算符;确定做算术右移,请用下面的rsha运算符。 (3)循环左移 rol 格式:data rol n 功能:返回整型值data循环左移n位后的结果。 例子:%x 0x80000000 rol 2 = 0x2 (32位版本) %x 0x8000000000000000 rol 2 = 0x2 (64位版本) (4)循环右移 ror 格式:data ror n 功能:返回整型值data逻辑循环右移n位后的结果。 例子:%x 0xf ror 8 = 0x0f000000 (32位版本) %x 0xf ror 8 = 0x0f00000000000000 (64位版本) (5)逻辑右移 rshl 格式:data rshl n 功能:无论当前系统采用何种形式的右移,返回整型值data逻辑右移n位后的结果。 逻辑右移是指,当右移n位时,高n位全补0(不考虑符号位)。 例子:%x 0xf0000000 rshl 4 = 0x0f000000 (6)算术右移 rsha 格式:data rsha n 功能:无论当前系统采用何种形式的右移,返回整型值data算术右移n位后的结果。 算术右移是指,如果符号位为1,则右移n位时,高n位全补1,否则全补0。 例子:%x 0x80000000 rsha 8 = 0xff800000 (32位版本) %x 0x70000000 rsha 4 = 0x70000000 (32位版本) %x 0x8000000000000000 rsha 8 = 0xff80000000000000 (64位版本) %x 0x7000000000000000 rsha 4 = 0x700000000000000 (64位版本) 6-二进制运算函数 (1)读二进位函数 rb 格式:rb(data, start, length) 功能:对整型值data,从低位的start位开始(位数从0开始计),连续取出其高位的length位的值,返回该值。 例子:%b rb(0b1010 0101, 4, 2) = 0b10 (2)写二进位函数 wb 格式:wb(data, start, length, value) 功能:对整型值data,将其中start位开始(位数从0开始计)、其后连续的的length位的值改写为value,返回修改后的data值。 例子:%b wb(0b1010 0000, 4, 4, 0b1111) = 0b1111 0000 (3)指定位置1函数 setb 格式:setb(data, start, length) 功能:对整型值data,从低位的start位开始(位数从0开始计),其后连续的length位全部置1,返回修改后的data值。 例子:%x setb(0x0, 8, 16) = 0x00ffff00 (4)指定位清0函数 rstb 格式:rstb(data, start, length) 功能:对整型值data,从低位的start位开始(位数从0开始计),其后连续的length位全部置0,返回修改后的data值。 例子:%x rstb(0xffffffff, 8, 16) = 0xff0000ff (5)指定位反转函数 rvsb 格式:rvsb(data, start, length) 功能:对整型值data,从低位的start位开始(位数从0开始计),其后连续的length位全部反转,返回修改后的data值。 例子:%x rvsb(0x0, 8, 16) = 0x00ffff00 七 逻辑运算 支持6种关系运算,和3种逻辑运算,以及C/C++条件运算。 当逻辑结果为真时,结果为整型值1;当逻辑结果为假时,结果为整型值0。 1-关系运算 (1)大于 > 1+2 > 3+4 = (1+2) > (3+4) = 0 (2)大于等于 >= 3.14*2 >= 6.28 = 1 (3)小于 < 1+2 < 3+4 = (1+2) < (3+4) = 1 (4)小于等于 <= 3.14*2 <= 6.28 = 1 (5)等于 == 3.14*2 == 6.28 = 1 (6)不等于 != 3.14*2 != 6.28 = 0 2-逻辑运算 (1)逻辑与 && 1<2 && 3<5 = (1<2) && (3<5) = 1 1<2 && 32 || 3>3 = 0 1>2 || 3>=3 = 1 (3)逻辑非 ! !0 = 1 !1 = 0 !(-3.14) = 0 3-条件运算 ? : 格式:表达式1 ? 表达式2 : 表达式3 结果:当表达式1为真时,整个表达式的结果等于表达式2,否则结果等于表达式3。 例子:1+2>3+4 ? 1+2 : 3+4 = 7 sqr(1+2<3+4 ? 1+2 : 3+4) = sqr(1+2) = 1.73205 4-逻辑结果值 逻辑结果值(0或1)又可作为整数参与其它运算。 (-3<5) + 2 = 1 + 2 = 3 1<2<3 = (1<2)<3 = 0e ? pi : e (得到常量pi和e中的大者) myave = ave(65, 78, 84.5, 96) (求几个数的平均值,myave = 80.875) 对已定义的变量可以再次赋值,这时原值丢失,保存新值。 引用未定义的变量时会报错。 2-赋值表达式 赋值运算本又是个表达式,即赋值表达式。 整个赋值表达式的值,为=号右部表达式的值,例如 a = (b = 5) (此时变量a和b的值都等于5) 采用此法可以一次性定义多个变量。 3-内置的常量 以下内置常量可以直接使用,常量名不区分大小写。 不能对常量重新赋值,否则会报错。 e = 2.718281828459 (自然对数的底) gold = 0.61803398874989484820 (黄金分割比率) inch = 2.54 (1英寸等于几厘米) kv = 273.15 (开氏温度 = 摄氏温度 + 273.15) nmi = 1.852 (1海里等于几公里) pi = 3.1415926535898 (圆周率) 十二 运算符的优先级 1-优先级顺序 运算符按优先级划分为如下14组,各个组的优先级由高到低,同一组内的优先级相同。 不清楚优先级时,请用使用括号。 (1) -(取负) !(逻辑非) ~(位取反) %(百分比) %%(万分比) !(阶乘) K M G T P E(存储单位后缀) w y wy yy wyy yyy kilo mil bil tril(数量后缀) id(arg1, arg2, ...)(函数调用) (2) abs ceil floor lg ln log exp sqr rtd dtr sin cos tan ctan asin acos atan sinh cosh tanh intcm cmtin nmtkm kmtnm lbtkg kgtlb ftc ctf ktc ctk (3) * / mod(求余) **(幂运算) (4) + - (5) <> rshl rsha rol ror (6) > >= < <= (7) == != (8) & (按位与) (9) ^ (按位异或) (10) | (按位或) (11) && (逻辑与) (12) || (逻辑或) (13) ?: (条件运算) :=:? (等比运算) (14) = (赋值运算) 2-用括号指定运算顺序 1 + 2 * 3 = 1 + (2 * 3) = 7 (1 + 2) * 3 = 9 1 * (2 + 3) = 5 author: huyansoft

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧