C语言第十二课---------操作符的介绍与使用(下)

这篇具有很好参考价值的文章主要介绍了C语言第十二课---------操作符的介绍与使用(下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者前言

🎂        ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂

   🎂      作者介绍:                              🎂🎂

       🎂 🎉🎉🎉🎉🎉🎉🎉              🎂

          🎂作者id老秦包你会,         🎂

简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂

             喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨         🎂🎂🎂🎂🎂🎂🎂🎂

                 🎂个人主页::小小页面🎂

                  🎂gitee页面:秦大大🎂

                   🎂🎂🎂🎂🎂🎂🎂🎂
        🎂  一个爱分享的小博主 欢迎小可爱们前来借鉴🎂
_______________________________________________________

______________________________________________________________________

目录

        条件操作符

        逗号表达式

        下标引用、函数调用和结构成员

——————————————————————————————————————

插播小知识

1.%u 十进制无符号整数

%d把对应的整数按有符号十进制输出,%u把对应的整数按无符号十进制输出,比如printf("%d,%u\n",-123,-123);,输出则是-123,4294967173——因为-123的补码是11111111111111111111111110000101,在%u控制下把它当正数输出了。

 条件操作符(三目操作符)

exp1 ? exp2 : exp3
exp1为真的话返回exp2,否则返回exp3
#include <stdio.h>
int main()
{
	int a = 10;
	int b = 2;
	int m = 0;
	/*if (a > b)
		m = a;
	else
		m = b;*/
	m = (a > b ? a : b);
	printf("%d", m);
	return 0;
}

逗号表达式

exp1, exp2, exp3, …expN

逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
#include <stdio.h>
int main()
{
	int a = 1;
	int b = 2;
	int c = (a = 2 + b, b = a + b);
	printf("%d %d %d", a, b, c);
	return 0;
}

从左到右执行下去,直到最后一个表达式

下标引用、函数调用和结构成员

[ ] 下标引用操作符

操作数:一个数组名 + 一个索引值
#include <stdio.h>
int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	printf("%d", arr[2]);
	return 0;
}

[]的操作数是arr 和2

( ) 函数调用操作符

#include <stdio.h>
int Add(int a, int b)
{
	return a + b;
}
int main()
{
	int a = 0;
	int b = 2;
	Add(a, b);//()函数调用操作符

	return 0;
}

访问一个结构的成员

. 结构体 . 成员名
-> 结构体指针 -> 成员名
#include <stdio.h>
struct book
{
	char name[20];
	int price;

};
int  main()
{
	struct book b = { "明解C语言", 55 };
	printf("%s\n", b.name);

	struct book* pb = &b;
	printf("%s\n", pb -> name);
	printf("%s\n", (*pb).name);

	return 0;
}

表达式求值

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

隐式类型转换

1.整形提升(运用于小于一个int 大小的数值)

表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为 整型
提升
整型提升的意义 表达式中各种长度可能小于 int 长度的整型值,都必须先转 换为 int unsigned int ,然后才能送入 CPU 去执行运算
如何进行整体提升呢?
整形提升是按照变量的数据类型的符号位来提升的
在int中有signed和unsigend, 所有char也分有符号和无符号,因为C语言没有规定,所以取决于编译器
// 负数的整形提升
char c1 = - 1 ;
变量 c1 的二进制位 ( 补码 ) 中只有 8 个比特位:
1111111
因为 char 为有符号的 char
所以整形提升的时候,高位补充符号位,即为 1
提升之后的结果是:
11111111111111111111111111111111
// 正数的整形提升
char c2 = 1 ;
变量 c2 的二进制位 ( 补码 ) 中只有 8 个比特位:
00000001
因为 char 为有符号的 char
所以整形提升的时候,高位补充符号位,即为 0
提升之后的结果是:
00000000000000000000000000000001
// 无符号整形提升,高位补 0
注意一下,对char进行提升要先写出8个bit来确定符号位,然后根据符号位进行整体提升,计算机就是这样计算大小小于int的数值
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;
}
a,b 要进行整形提升 , 但是 c 不需要整形提升
a,b 整形提升之后 , 变成了负数 , 所以表达式 a==0xb6 , b==0xb600 的结果是假 , 但是 c 不发生整形提升 , 则表 达式 c==0xb6000000 的结果是真 .

我们只需要知道小于int大小的数值要整形提升

#include <stdio.h>
int main()
{
	char a = 1;//    00000000000000000000000000000001  补码   ---a存储的只有00000001
	char b = 30;//   00000000000000000000000000011110 补码	----b存储的只有00011110
	char c = a + b;// 参与了运算
					//a整形提升为 00000000000000000000000000000001
					//b整形提升为 00000000000000000000000000011110
					//	结果	  00000000000000000000000000011111
					//00011111  -char c存储的8个bit
					//c整形提升	  00000000000000000000000000011111   --->补码
					//最终原码为  00000000000000000000000000011111 
	printf("%d", c);
	return 0;
}

所以我们可以理解为当字符或者其他小于int长度的,在参与运算或者判断又或者配合某些操作符就会发生整形提升,提升到4个字节,否则原来是多少字节就是多少字节

2.算术转换(用于大小大于或者等于int 大小的数组)

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类 型,否则操作就无法进行
C语言第十二课---------操作符的介绍与使用(下),开发语言,c语言

 

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

操作符的属性

复杂表达式的求值有三个影响的因素。
1. 操作符的优先级
2. 操作符的结合性
3. 是否控制求值顺序。
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	//优先级
	b = 9 + 5 * 6;
	//结合性
	b = 6 + 5 + 3;
	return 0;
}

在相邻操作符不一样的时候,先考虑优先级

相邻操作符相同时,考虑结合性

结合性就是计算方向

#include <stdio.h>
int main()
{
 int i = 1;
 int ret = (++i) + (++i) + (++i);
 printf("%d\n", ret);
 printf("%d\n", i);
 return 0;
}

这个代码在不同编译器结果不一样,所以这个代码的写法不行,我们可以看看vs编译器是怎样运行的,我们看看反汇编

C语言第十二课---------操作符的介绍与使用(下),开发语言,c语言

mov :是把后面的值存放到前面去, 把1存放到dword ptr[i]

add:增加

eax、ecx、都是寄存器文章来源地址https://www.toymoban.com/news/detail-630897.html

总结 :我们写出的表达式如果不能通过操作符的属性确定唯一的计算路径,那这个表达式就是存在问题 的。

到了这里,关于C语言第十二课---------操作符的介绍与使用(下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 学了那么长时间的编程,C语言的各种操作符都搞不懂?点开这里有详细的介绍—>

    目录 前言 一、原码、反码、补码的基础概念 1.原码 2.反码 3.补码 二、原码、反码、补码的计算方法 1.原码 2.反码 3.补码 三、算术操作符 四、移位操作符 1. 左移操作符 移位规则: 2. 右移操作符 移位规则: (1) 逻辑移位 (2) 算术移位 五、位操作符 1. 按位与运算(AND)

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

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

    2024年02月11日
    浏览(32)
  • 断言操作符介绍

    目录 1.延时操作符(##) 1.1 ##m 1.2 ##[m:n] 2.蕴含操作符(|=,|-) 2.1 |=操作符 2.2 |-操作符  3 重复操作符 ([*m][-m][=m]) 3.1 连续重复操作符([*m][*m:n]) 3.2 跟随重复操作符([-m][-m:n]) 3.3 非连续重复操作符([=m]) 3.4 小结 4 SVA 4.1 与或非 4.2 动态控制函数 4.3 SVA内嵌函数 4.4 S

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

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

    2024年02月13日
    浏览(43)
  • 【c语言操作符系列1】^(异或操作符)讲解和多种例题详解

    目录 一、^ 是什么(^称为异或) 二、^的规律(特点) 三、可利用^秒杀的常见例题(重点) 1、消失的数字  2、不一样的人生密码 3、交换两个数(不能创建中间变量) 4、找出只出现一个的两个数字 是一种操作符, 针对二进制异或而言的 ,两个数对应的二进制位相同,异或

    2024年02月16日
    浏览(56)
  • 【C语言】操作符

    算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号操作符 下标引用、函数调用和结构成员操作符 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只

    2024年01月16日
    浏览(42)
  • <C语言> 操作符

    加法(+):用于将两个操作数相加。 减法(-):用于将第一个操作数减去第二个操作数。 乘法(*):用于将两个操作数相乘。 除法(/):用于将第一个操作数除以第二个操作数。 取模(%):用于求两个操作数相除的余数。 乘法、除法和取模具有相同的优先级,高于加法

    2024年02月12日
    浏览(40)
  • C语言操作符例题

    感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸🥸 C语言 🐿️🐿️🐿️ C语言例题 🐣🐓🏀 python 下面代码的结果是:( ) A.a = 8 b = 23 c = 8 B.a = 9 b = 23 c = 8 C.a = 9 b = 25 c = 8 D.a = 9 b = 24 c = 8 答案 B c=++a是先执行++a,也就是a=a+1=6(注意这

    2024年02月04日
    浏览(40)
  • C语言:“~”操作符详解

    ~:含义及用法举例 文章目录 前言 一、“~”是什么? 二、原码、反码及补码 1.简介 2.用法举例 ①正整数 ②负整数 ③零 三、“~”操作符 1.简介 2.用法举例 ①正整数 ②负整数 ③零 本文在简单介绍原码反码补码的基础上,介绍“~”操作符的用法。 ~:一种单目操作符,即对

    2024年02月10日
    浏览(41)
  • C语言初级<操作符>

    C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。 本篇文章是基于C语言,对入门小知识操作符的讲解,展

    2024年02月12日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包