网站开发时间段,青岛网站建设效果,网络服务提供者发现用户利用其网络,100种晚上禁用的app大全C用运算符表示算术运算。
C没有指数运算符#xff0c;不过#xff0c;C的标准数学库提供了一个pow()函数用于指数运算。
基本运算符
赋值运算符#xff1a;
变量名变量值 从右到左
左值和变量名的区别#xff1a;
变量名是一个标识符的名称#xff0c;左值是一个可变…C用运算符表示算术运算。
C没有指数运算符不过C的标准数学库提供了一个pow()函数用于指数运算。
基本运算符
赋值运算符
变量名变量值 从右到左
左值和变量名的区别
变量名是一个标识符的名称左值是一个可变的量。
变量可以是左值也可以是右值但是常量绝对不可以是一个左值。
其它赋值运算符
下面的运算符用右侧的值根据指定的操作更新左侧的变量 把右侧的值加到左侧的变量上
- 从左侧的变量中减去右侧的值
* 把左侧的变量乘以右侧的值
/ 把左侧的变量除以右侧的值
% 左侧变量除以右侧值得到的余数
这些组合赋值运算符与普通赋值运算符的优先级相同都比算术运算符的优先级低。
加法运算符
相加的值运算对象可以是变量也可以是常量。
减法运算符-
左侧数减去右侧数
和-运算符都被称为二元运算符即这些运算符需要两个运算对象才能完成操作
符号运算符-和
减号还可用于标明或改变一个值的代数符号这样的负号被称为一元运算符一元运算符只需要一个运算对象
乘法运算符*
除法运算符/
被除数/除数
整数除法和浮点数除法不同。浮点数除法的结果是浮点数而整数除法的结果是整数。整数是没有小数部分的数。这使得5除以3很让人头痛因为实际结果有小数部分。在C语言中整数除法结果的小数部分被丢弃这一过程被称为截断truncation。
注意整数除法会截断计算结果的小数部分丢弃整个小数部分不会四舍五入结果。混合整数和浮点数计算的结果是浮点数。实际上计算机不能真正用浮点数除以整数编译器会把两个运算对象转换成相同的类型。
C99标准以前C语言给语言的实现者留有一些空间让他们来决定如何进行负数的整数除法。一种方法是舍入过程采用小于或等于浮点数的最大整数。当然对于3.8而言处理后的3符合这一描述。但是-3.8 会怎样该方法建议四舍五入为-4因为-4 小于-3.8.但是另一种舍入方法是直接丢弃小数部分。这种方法被称为“趋零截断”即把-3.8转换成-3。在C99以前不同的实现采用不同的方法。但是C99规定使用趋零截断。所以应把-3.8转换成-3。
运算符优先级
乘法和除法的优先级比加法和减法高所以先执行乘法和除法。如果两个运算符的优先级相同怎么办如果它们处理同一个运算对象则根据它们在语句中出现的顺序来执行。对大多数运算符而言这种情况都是按从左到右的顺序进行运算符除外。
表达式树可以用来表示求值的顺序
最先执行圆括号中的部分。圆括号内部按正常的规则执行。 正、负号是一元加、减号是二元。
结合律只适用于共享同一运算对象的运算符。
其他运算符
sizeof运算符和size_t类型
sizeof运算符以字节为单位返回运算对象的大小在C中1字节定义为char类型占用的空间大小。过去1字节通常是8位但是一些字符集可能使用更大的字节。运算对象可以是具体的数据对象如变量名或类型。如果运算对象是类型如float则必须用圆括号将其括起来。
C 语言规定sizeof 返回 size_t 类型的值。这是一个无符号整数类型但它不是新类型。
求模运算符%
求模运算符modulus operator用于整数运算。求模运算符给出其左侧整数除以右侧整数的余数remainder。
求模运算符只能用于整数不能用于浮点数。
作用控制程序流
如果第1个运算对象是负数那么求模的结果为负数如果第1个运算对象是正数那么求模的结果也是正数。
递增运算符
递增运算符increment operator执行简单的任务将其运算对象递增1。该运算符以两种方式出现。第1种方式出现在其作用的变量前面这是前缀模式第2种方式出现在其作用的变量后面这是后缀模式。两种模式的区别在于递增行为发生的时间不同。
如果n是表达式的一部分可将其视为“先使用n再递增”而n则274表示“先递增n再使用”。
把变量的递增过程放入while循环的条件中有什么好处
1.使得程序更加简洁。
2.把控制循环的两个过程集中在一个地方。该循环的主要过程是判断是否继续循环次要过程是改变待测试的元素。
3.生成的机器语言代码效率更高因为它和实际的机器语言指令很相似。
如果使用前缀形式和后缀形式会对代码产生不同的影响那么最为明智的是不要那样使用它们。
递减运算符--
相等运算符
逗号运算符,
逗号运算符把两个表达式连接成一个表达式并保证最左边的表达式最先求值。逗号运算符通常在for循环头的表达式中用于包含更多的信息。整个逗号表达式的值是逗号右侧表达式的值。
优先级
递增运算符和递减运算符都有很高的结合优先级只有圆括号的优先级比它们高。因此x*y表示的是(x)*(y)而不是(xy)。不过后者无效因为递增和递减运算符只能影响一个变量或者更普遍地说只能影响一个可修改的左值而组合x*y本身不是可修改的左值。
PS如果一个变量出现在一个函数的多个参数中不要对该变量使用递增或递减运算符 如果一个变量多次出现在一个表达式中不要对该变量使用递增或递减运算符。
逻辑运算符
逻辑运算符的运算对象通常是关系表达式。!运算符只需要一个运算对象其他两个逻辑运算符都需要两个运算对象左侧一个右侧一个。 与
|| 或
! 非
优先级
!运算符的优先级很高比乘法运算符还高与递增运算符的优先级相同只比圆括号的优先级低。运算符的优先级比||运算符高但是两者的优先级都比关系运算符低比赋值运算符高。因此表达式a b b c ||b d相当于((a b) (b c)) || (b d)。也就是说b介于a和c之间或者b大于d。
尽管对于该例没必要使用圆括号但是许多程序员更喜欢使用带圆括号的第 2 种写法。这样做即使不记得逻辑运算符的优先级表达式的含义也很清楚。
逻辑表达式
当且仅当expression1和expression2都为真expression1 expression2才为真。
如果 expression1 或 expression2 为真expression1 || expression2 为真。
如果expression为假!expression则为真反之亦然。
求值顺序
逻辑表达式的求值顺序是从左往右。一旦发现有使整个表达式为假的因素立即停止求值。
条件运算符
C提供条件表达式作为表达if else语句的一种便捷方式该表达式使用 ?: 条件运算符。该运算符分为两部分需要 3 个运算对象。带一个运算对象的运算符称为一元运算符带两个运算对象的运算符称为二元运算以此类推。条件运算符是C语言中唯一的三元运算符。
格式 expression1?expression2;expression3 如果 expression1 为真非 0那么整个条件表达式的值与 expression2的值相同如果expression1为假0那么整个条件表达式的值与expression3的值相同。 if(expression1) expression2; else expression3; 地址运算符
指针pointer是 C 语言最重要的有时也是最复杂的概念之一用于储存变量的地址。前面使用的scanf()函数中就使用地址作为参数。概括地说如果主调函数不使用return返回的值则必须通过地址才能修改主调函数中的值。
元运算符给出变量的存储地址。如果pooh是变量名那么pooh是变量的地址。可以把地址看作是变量在内存中的位置。
间接运算符解引运算符*
后跟一个指针名或地址时*给出存储在指针指向地址上的值。 nurse22; ptrnurse; //指向nurse的指针 val*ptr; //把ptr指向的地址上的值赋给val