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日
    浏览(41)
  • 【C语言初阶】带你轻松玩转所有常用操作符(1) ——算数操作符,移位操作符,位操作符

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

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

    目录 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日
    浏览(47)
  • 初始C语言——详细讲解操作符以及操作符的易错点

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

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

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

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

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

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

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

    2024年01月16日
    浏览(51)
  • C语言---操作符详解

    算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号操作符 下标引用、函数调用和结构成员。 移位操作符,移动的是二进制位。 警告:对于移位运算符,不要移动负位数,这个是标准定义的。 3.1.1、原码、反码、补码介绍 整数

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

    哈喽,大家好,今天我们来学习C语言中的各中操作符。 目录 1.操作符的分类 2.算数操作符 整数的二进制表示 3.位移操作符 3.1左移操作符 3.2右移操作符 4.位操作符 5.赋值操作符 6.单目操作符 6.1 单目操作符介绍 ~ 的用法: 6.2 sizeof 和 数组 7.关系操作符 8.逻辑操作符 9. 条件操

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

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

    2024年02月10日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包