【C语言基础考研向】07逻辑运算符与赋值运算符

简介: 本文介绍了C语言中的逻辑运算符与逻辑表达式、赋值运算符以及求字节运算符`sizeof`。逻辑运算符包括`!`(逻辑非)、`&&`(逻辑与)和`||`(逻辑或),其优先级规则与数学运算符类似。通过示例展示了如何用这些运算符判断闰年及逻辑非的运算方向。此外,文章还解释了左值与右值的概念及其在赋值运算中的应用,并介绍了复合赋值运算符的使用方法,如加后赋值`+=`和乘后赋值`*=`。最后,通过`sizeof`运算符示例展示了如何获取变量的字节大小。

1.逻辑运算符与逻辑表达式

逻辑运算符!、&&、ll依次为逻辑非、逻辑与、逻辑或,这和数学上的与、或、非是一致的.逻辑非的优先级高于算术运算符,逻辑与和逻辑或的优先级低于关系运算符.逻辑表达式的值只有真和假,对应的值为1和0,下例中的代码是计算一年是否为闰年的例子,因为需要重复测试,所以我们用了一个while循环。

针对代码中的逻辑非,首先给变量j赋值10,因为j的值非0,所以!j的值为0;然后,由于逻辑非是单目运算符,结合顺序为从右至左,得到!lj的值为1.也就是说,对0取非,得到的值为1;对非О值取非,得到的值为0.

代码例子:闰年的判断

#include <stdio.h>
#include <stdlib.h>

int main()
{
   
    int i=O,j=1;
    while(scanf("%d" ,&i))(
    if(i%4==0 && i%100!=O |li%400==O){
   
    printf("i is leap year\n");}elsef
    printf("i is not leap year\n");
    }
}

代码例子:逻辑非自右向左运算

#include <stdio.h>
#include <stdlib.h>

int main()
{
   
    i=!!j;
    printf("i的值=%d\n",i);return 0;
}

代码例子:短路运算

#include <stdio.h>
int main()
{
   
    int i=o;
    i&&printf("you can't see me\n");
    return o;
}

逻辑与短路运算是当前面一个表达式为假时,后面的表达式不会得到执行,逻辑或短路运算是当前面一个表达式为真时,后面的表达式不会得到执行。

有的时候我们不想写if(i)的时候,可以这么书写


2.赋值运算符

2.1 左值和右值

为了理解有些操作符存在的限制,必须理解左值 (L-value)和右值 (R-value)之间的区别.这两个术语多年前由编译器设计者创造并沿用至今,尽管它们的定义与C语言并不严格吻合.
左值是那些能够出现在赋值符号左边的东西,右值是那些可以出现在赋值符号右边的东西.例如

a=b +25;

其中, a是一个左值,因为它标识了一个可以存储结果值的地点; b+25是一个右值,因为它指定了一个值.
它们可以互换吗?比如下面这种写法:

b + 25 = a;

因为每个位置都包含一个值,所以原先用作左值的a此时也可以作为右值;然而, b+25不能作为左值,因为它并未标识一个特定的位置(并不对应特定的内存空间).因此,上面这条赋值语句是非法的.

一条错误的代码样例,会报错

#include<stdio.h>
int main()
{
   
    int a=1,b=2;
    b+25=a;
    return 0;
}

上面的例子执行时会报下面的编译错误

2.2 复合赋值运算符

复合赋值运算符操作是一种缩写形式,使用复合赋值运算符能使对变量的赋值操作变得更加简洁。例如.

iNum = iNum + 5;

赋值运算符与复合赋值运算符的区别如下:
(1)复合赋值运算符简化了程序,可使程序精炼,提升阅读速度。(2)复合赋值运算符提高了编译效率。
下例说明了加后赋值与乘后赋值的用法。
【例】加后赋值与乘后赋值的用法。

#include <stdio.h>#include <stdlib.h>
int main()
{
   
    int iNum,iResult;
    iNum=10;
    iResult=3;
    iNum+=5;
    iResult*=iNum;
    printf( "iNum=%d\n",iNum);
    printf(" iResult=%d\n",iResult);
}

从上面的程序代码可以看到,iNum+=5代表iNum加5后再赋值给iNum,因此iNum的最终值为15,而 iResult的值等于其自身乘以iNum 的值,所以最终结果为45.


3.求字节运算符sizeof

很多人会认为sizeof是一个函数,这种理解是错误的,实际sizeof是一个运算符,不像其他运算符是一个符号,sizeof是字母组成的,用于求常量或变量所占用的空间大小,请看下例:

#include <stdio.h>
int main()
{
   
    int i=0;
    printf(""i size is %d\n",sizeof(i));
    return O;
}

运行结果为i size is 4,可以求得整型变量占用的空间大小是4个字节。

相关文章
|
7天前
|
C语言
c语言运算符
C的运算符有以下几种: 算术运算符:+、-、*、/、% 结合方向自左向右 关系运算符:>、<、==、>=、<=、!= 逻辑运算符:!、&&、|| 位运算符<<、>>、~、|、^、& 赋值运算符:=及符号扩展赋值运算符(+=、-=、*=、/=) 条件运算符:? : 逗号运算符:, 指针运算符:*、& 求字节运算符:sizeof 强制类型转换运算符:((类型)) 分量运算符:.、-> 下标运算符:[]
19 4
|
30天前
|
存储 算法 C语言
通义灵码在考研C语言和数据结构中的应用实践 1-5
通义灵码在考研C语言和数据结构中的应用实践,体验通义灵码的强大思路。《趣学C语言和数据结构100例》精选了五个经典问题及其解决方案,包括求最大公约数和最小公倍数、统计字符类型、求特殊数列和、计算阶乘和双阶乘、以及求斐波那契数列的前20项和。通过这些实例,帮助读者掌握C语言的基本语法和常用算法,提升编程能力。
60 4
|
2月前
|
C语言
C语言判断和运算符联系
在 C 语言中,判断与运算符紧密相关,主要体现在条件表达式的使用上。
194 87
|
2月前
|
安全 C语言
C语言运算符的使用注意点
在C语言中,正确使用运算符能提升代码的可读性和效率。本文介绍了八大注意事项:运算符优先级和结合性影响运算顺序;自增/自减运算符分前缀和后缀形式;逻辑运算符有短路特性;位运算符直接操作二进制位需谨慎;条件运算符简洁但避免复杂嵌套;类型转换避免意外结果;使用括号明确运算顺序。掌握这些要点有助于编写更安全高效的代码。
193 72
|
1月前
|
存储 Java C语言
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
39 3
|
1月前
|
C语言
C语言条件运算符详解
C语言条件运算符,也称为三元运算符,是一种简化if-else语句的表达式,形式为:条件?表达式1:表达式2。当条件为真时,计算并返回表达式1的值;否则计算并返回表达式2的值。它可用于快速实现简单的条件分支逻辑。
|
2月前
|
安全 C语言
在C语言中,正确使用运算符能提升代码的可读性和效率
在C语言中,运算符的使用需要注意优先级、结合性、自增自减的形式、逻辑运算的短路特性、位运算的类型、条件运算的可读性、类型转换以及使用括号来明确运算顺序。掌握这些注意事项可以帮助编写出更安全和高效的代码。
49 4
|
2月前
|
存储 C语言 数据格式
【C语言基础考研向】03混合运算和printf讲解
本文分为两部分。第一部分介绍了C语言中的混合运算与类型强制转换的重要性,通过实例展示了当整型数进行除法运算且结果为小数时,必须使用类型转换才能正确存储浮点数结果。第二部分详细讲解了`printf`函数的功能与使用方法,包括格式化输出不同类型数据的基本语法,并通过具体示例演示了如何利用字段宽度和对齐方式来控制输出格式,帮助读者更好地理解和掌握输出格式的控制技巧。
47 10
|
2月前
|
C语言
【C语言基础考研向】05 scanf读取标准输入超详解
本文详细解析了C语言中`scanf`函数的工作原理及常见问题。首先介绍了`scanf`如何处理标准输入,并通过示例说明了为何有时会出现阻塞现象及其解决办法。接着探讨了当输入包含多种数据类型时,特别是字符型数据的处理方式,强调了格式控制的重要性,并给出了正确的输入格式示例。通过正确配置,可以避免因空格和换行符导致的问题,确保数据准确读取。
74 10
|
2月前
|
程序员 C语言
【C语言基础考研向】06运算符与表达式
本文介绍了C语言中的运算符分类、算术运算符及表达式、关系运算符与表达式以及运算符优先级等内容。首先概述了13种运算符类型,接着详细说明了算术运算符的优先级与使用规则,以及关系运算符和表达式的真假值表示,并给出了C语言运算符优先级表。最后附有课后习题帮助巩固理解。
104 10