【初阶C语言】操作符2---表达式求值

这篇具有很好参考价值的文章主要介绍了【初阶C语言】操作符2---表达式求值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:本节重点介绍操作符的使用,如,优先级高低、类型转换等


一、逻辑操作符

前言:逻辑操作符包括逻辑与(&&)逻辑或(||),操作对象:两个

1.逻辑与(&&)

(1)定义

&&的字面意思就是并且。如:A&&B,需要A和B同时成立,整体才成立。

(2)图形解释

【初阶C语言】操作符2---表达式求值,初阶C语言,c语言,开发语言

 0表示假,所以需要A和B同时满足条件才会执行

2.逻辑或(||)

(1)定义

||的字面意思就是或者。如:A||B只需要其中一个成立,整体就会成立。

(2)图像解析

【初阶C语言】操作符2---表达式求值,初阶C语言,c语言,开发语言

 A||B只需要满足其中一个条件即可

 3.&&与||的应用和细节

(1)应用1-----用于判断的条件

题目要求:0-17岁,输出未成年;18-30岁,输出青年;31-45岁,输出中年人……

#include<stdio.h>
int main()
{
	//0-17岁,输出未成年;18-30岁,输出青年;31-45岁,输出中年人……
	int age;
	scanf("%d",&age);
	if (age < 18)
		printf("未成年\n");
	else if (18 <= age && age <= 30)
		printf("成年人\n");
	else if (age >= 31 && age <= 45)
		printf("中年人\n");

	return 0;
}

【初阶C语言】操作符2---表达式求值,初阶C语言,c语言,开发语言

(2)应用2---细节的把控

 代码1:

#include<stdio.h>
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;

	printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
	printf("%d\n",i);
	return 0;
}

运行结果:

【初阶C语言】操作符2---表达式求值,初阶C语言,c语言,开发语言

第一步:a=0,就表示假的意思。

第二步:a++&&++b,因为a已经是假的,然后才a++,根据&&符号可知,已经不需要再执行b++语句就已经得出结论。

第三步:在&&条件中,只需要前面的条件为假,则不会再执行后面的语句;如果前面为真,才会接着判断后面的语句

修改代码:a=1

#include<stdio.h>
int main()
{
	int i = 0, a = 1, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;

	printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
	printf("%d\n",i);
	return 0;
}

运行结果: 与刚才的结果大为不同

【初阶C语言】操作符2---表达式求值,初阶C语言,c语言,开发语言

代码2:

#include<stdio.h>
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ || ++b || d++;//或者操作符

	printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
	printf("%d\n",i);
	return 0;
}

运行结果:

【初阶C语言】操作符2---表达式求值,初阶C语言,c语言,开发语言

第一步:执行a,左边为假,在a++,继续执行||右边的语句。

第二步:因为b的起始值≠0,所以为真,不再执行||右边的语句。此时整体的表达式都为真。

第三步:||操作符,左边为真时,不再执行右边的语句;当左边为假,才会继续执行或者判断右边的语句。

 总结:

1.&&操作符,如果左边操作数为假,右边无需计算。

2.||操作符,如果左边操作数为真,右边无需计算。


表达式求值有三部分:隐式类型转换、算术转换和操作符的属性。

        表达式求值的顺序一部分是由操作符的优先级和结合性决定。
同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。

二、隐式类型转换

前言:这里介绍的一般就是整型提升的内容

1.整形提升的定义

(1)C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升

(2)操作的对象是二进制的补码

2.整形提升的条件

(1)整形提升就是小于整形的类型提升到整形,如:char类型提升到int型。

(2)只要字符型(char)和短整形(short)的数据参与到表达式的运算,就会发生整形提升。

(3)整形提升是按照变量的数据类型的符号位来提升的 。

有符号数据:整形提升时会根据最高位的数字来补。比如:最高位是1,那么就会补1,补到32为比特位;最高位是0,则会补0

无符号数据:整型提升时,默认补0。

3.整形提升例子

(1)例子1

代码:

#include<stdio.h>
int main()
{
	char a = 5;
	char b = 126;
	//参与到表达式的运算(a+b),发生第一次整形提升
	char c = a + b;
	printf("%d\n",c);//第二次整形提升
	return 0;
}

运行结果:

【初阶C语言】操作符2---表达式求值,初阶C语言,c语言,开发语言

代码分析:

【初阶C语言】操作符2---表达式求值,初阶C语言,c语言,开发语言

(2)例子2

代码:

#include<stdio.h>
int main()
{
	char a = 0xb6;
	short b = 0xb600;
	int c = 0xb6000000;
	if (a == 0xb6)
		printf("a");
	if (b == 0xb600)
		printf("b");
	if (c == 0xb6000000)
		printf("c");
	
	return 0;
}

运行结果:

【初阶C语言】操作符2---表达式求值,初阶C语言,c语言,开发语言

 代码分析:a和b都发生了整形提升,数据发生了改变,只有c不需要整形提升,因此数据没有发生改变。

【初阶C语言】操作符2---表达式求值,初阶C语言,c语言,开发语言

(3)例子3

代码:

#include<stdio.h>
int main()
{
	char c = 1;
	printf("%u\n", sizeof(c));
	printf("%u\n", sizeof(+c));
	printf("%u\n", sizeof(-c));
	return 0;
}

运行结果:

【初阶C语言】操作符2---表达式求值,初阶C语言,c语言,开发语言

代码分析:

【初阶C语言】操作符2---表达式求值,初阶C语言,c语言,开发语言

总结:只有在一些特定的情况下才会发生整形提升,从char和short类型提升为整形;有时候提升完,数据大小会发生改变。

三、算术转换

1.定义

(1)算术转换的条件:数据类型>=整形

(2)转换层次,由低到高

【初阶C语言】操作符2---表达式求值,初阶C语言,c语言,开发语言

如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。 

四、操作符的属性

1.作用

(1)用于复杂表达式的求值

(2)求值的三大因素

1. 操作符的优先级(相邻操作符,优先级高的先计算)
2. 操作符的结合性(从左向右计算、从右向左计算或没有结合性)
3. 是否控制求值顺序(逻辑操作符、三目操作符和逗号表达式)

 2.做法

为了避免写出一些歧义表达式,所以我们要多利用括号。文章来源地址https://www.toymoban.com/news/detail-701201.html

到了这里,关于【初阶C语言】操作符2---表达式求值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 初阶C语言-操作符详解(下)

    🌞 “等春风得意,等时间嘉许!” 接下来,我们把操作符没学完的继续学完! 📖我们来看一下下面这段代码: 关系操作符: = = !=(用于测试不相等) ==(用于测试相等) 注:不要把 == 和 = 混起来❗ ✅ == 用于测试相等, = 用于赋值。 📖逻辑操作符: (逻辑与操作符)

    2024年02月13日
    浏览(39)
  • 初阶C语言——详解操作符(1)

    Hello,我们又见面了,最近不知道大家是否在持续输出代码呢?代码能力是否提高了呢?今天让我们来一起学习操作符,操作符在我们学习语言中很重要,我们要知道每个操作符的作用和用法,下面开始我们的学习。 操作符分类: 算术操作符 移位操作符 位操作符 赋值操作符

    2024年02月12日
    浏览(38)
  • 【C语言初阶】带你轻松玩转所有常用操作符(1) ——算数操作符,移位操作符,位操作符

    君兮_的个人主页 勤时当勉励 岁月不待人 C/C++ 游戏开发 Hello,这里是君兮_,最近要准备期末复习了,可能更新的就不会那么频繁了,下个星期恢复正常更新。 今天给大家带来的是操作符详解,由于这部分的内容比较多,可能会分成几部分讲,今天带来的是第一部分的内容,废

    2024年02月11日
    浏览(44)
  • 【C语言初阶(七)】操作符详解

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C语言学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多C语言知识   🔝🔝 我们已经在了解C语言的内一章节熟悉了所有的操作符了解C语言.其实操作符还有一些更细节更有用的延申内容,本章就给大家带来

    2024年02月09日
    浏览(101)
  • 【C语言初阶(16)】操作符2

    在 C 语言中,使用关系操作符来判断两个数之间的大小关系。 关系运算符都是双目运算符 ,其结合性均为从左到右。 关系运算符的优先级低于算术运算符,高于赋值运算符。 逻辑运算符获得的是一个逻辑值, 逻辑值只有 “ 真 ” 或 “ 假 ”两种状态 。 运算符 含义 优先级

    2024年02月16日
    浏览(37)
  • 【初阶C语言】操作符1--对二进制的操作

    前言:本节内容介绍的操作符,操作的对象是二进制位。所以前面先介绍整数的二进制位 1.二进制介绍 (1)整数的二进制表示形式有三种:原码、反码和补码。 (2)原码、反码和补码的长度有数据类型来决定,如整数,就是四个字节,转化后是三十二位比特位,所以一个整

    2024年02月09日
    浏览(38)
  • 『C语言初阶』第六章-操作符详解

    🔥 博客主页 : 小羊失眠啦. 🔖 系列专栏 : C语言 🌥️ 每日语录 : 业精于勤,荒于嬉。 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 今天小羊又来为铁汁们更新C语言初阶的操作符详解,我们在平时写代码时总会写到一些算术操作符和赋值操作符,可是当铁汁们遇到其他的操作

    2024年02月14日
    浏览(36)
  • 【C语言初阶】操作符之 位运算符详解(“ << ”,“ >> ”,“ & ”,“ | ”,“ ^ ”,“ ~ ”)

    目录 C语言中六种位运算符: 一、位移运算符 1、移位运算符简介 2、先要了解一点 3、 左移运算符 4、右移运算符 5、警告 二、 1、 按位与 2、| 按位或 3、^ 按位异或 4、~ 取反 4、例子  按位与 | 按位或 ^ 按位异或 ~取反 右移 左移 位运算符用来对二进制位进行操作,C语言中

    2024年02月06日
    浏览(34)
  • 【C++初阶】类和对象——操作符重载&&const成员函数&&取地址重载&&日期类的实现

    ========================================================================= 个人主页点击直达: 小白不是程序媛 C++系列专栏: C++头疼记 ========================================================================= 目录   前言: 运算符重载 运算符重载  赋值运算符重载 前置++和后置++重载 const成员 取地址及cons

    2024年02月06日
    浏览(53)
  • 初始C语言——详细讲解操作符以及操作符的易错点

     第一章 “C“浒传——初识C语言(更适合初学者体质哦!)  第二章 详细认识分支语句和循环语句以及他们的易错点   第三章 初阶C语言——特别详细地介绍函数  第四章 初始C语言——详细地讲解数组的内容以及易错点  第五章  初始C语言——详细讲解操作符以及操

    2024年02月13日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包