C语言初阶第四篇:讲一讲 *** 作符,史上最全C语言 *** 作符介绍(全部的 *** 作符解析)

C语言初阶第四篇:讲一讲 *** 作符,史上最全C语言 *** 作符介绍(全部的 *** 作符解析),第1张

C语言初阶第四篇:讲一讲 *** 作符,史上最全C语言 *** 作符介绍(全部的 *** 作符解析)

雄关漫道真如铁,而今迈步从头越
老铁们,咱们上一篇文章把C语言语句的知识点给过了一遍,今天我们就从单目 *** 作符与双目 *** 作符和三目 *** 作符来说一说 *** 作符,咱们开始吧!

第四篇

一、单目 *** 作符二、双目 *** 作符

1、算术运算符2、关系运算符3、逻辑 *** 作符 三、三目 *** 作符--条件 *** 作符四、逗号运算符五、初等运算符--下标引用,函数调用和结构体成员六、位运算符

一、单目 *** 作符

单目运算符就是只有一个 *** 作数

单目运算符含义!就是取反的意思-负值+正值&取地址sizeof *** 作数的类型长度(以字节为单位)~对一个数的二进制进行取反- -前置、后置–++前置、后置++*间接访问 *** 作符(常见于指针解引用)(类型)强制类型转换

我们现在具体看一下这些 *** 作符(前面的几个比较好理解,我们从后面的挑几个说):

前置++和后置++
有什么区别?前置++就是先自增一,再使用,后置++就是先使用,再自增一。
前置- - 和后置- -
一样的,在前面就先减再用,在后面就先用再减。
但是注意,像这种错误的代码没必要研究,不同的编译器可能结果不一样:

	int a = 1;
	int b = (++a) + (++a) + (++a);//2+3+4
	printf("%dn", b);

关于自增和自减,我们只需要明白什么时候增,什么时候减就好了。

至于解引用 *** 作符,就可以理解为取出地址上的值,进行使用,一般用于指针。更详细的说明,我们会在指针的文章里深入探讨

这些 *** 作符,称为单目是因为只对一个数据进行 *** 作,所以,不要记混了双目 *** 作符和单目 *** 作符的概念呀!

二、双目 *** 作符 1、算术运算符 运算符含义*将运算符左右两边的数相乘/运算符左边的数除右边的数%进行取余+相加-相减

算数运算符的运算次序就是我们小学到现在一直使用的次序。

2、关系运算符

C语言提供6种关系运算符,如表所示:

运算符名称功能<小于a小于b时返回真;否则返回假<=小于等于a小于等于b时返回真;否则返回假>大于a大于b时返回真;否则返回假>=大于等于a大于等于b时返回真;否则返回假==等于a等于b时返回真;否则返回假!=不等于a不等于b时返回真;否则返回假

(注意加黑的地方,不要写错表达式了,特别是 赋值表达式 一个 = 和 等于 两个 = =)

这里注意一点:
关系运算符的值只能是0或1。
关系运算符的值为真时,结果值都为1。
关系运算符的值为假时,结果值都为0。

前4种关系运算符的优先级别相同,后两种也相同。前四种高于后两种。
关系运算符的优先级低于算术运算符。
关系运算符的优先级高于赋值运算符。

3、逻辑 *** 作符

逻辑 *** 作符只有三个,一个是与 ” && “ 一个是或 “ || ”。
另一个是单目运算符里的非 “ !”

&& 的判断顺序是从左至右,如果左边判断为假,那么右边不判断。
|| 判断顺序不区分,两边都要判断,即使左边为假,也继续判断右边的真假。

三、三目 *** 作符–条件 *** 作符

**exp1 ? exp2 : exp3 **

(exp就是expression,即表达式)
这也是C语言里唯一一个三目 *** 作符。

意思是:如果表达式1的结果为真,就计算表达式2,否则计算表达式3 。
例如:

int main()
{
	int a = 4;
	int b = 3;
	int c = 5;
	int d = 6;
	int e;
	e = a > b ? c > d ? d > a:c:b;
	printf("%dn", e);//结果是5
	return 0;
}

为什么结果是5?我们首先对式子进行切割:
e = (a > b ) ? ( c > d ? d > a : c) : b ;
这是第一步切割,我们发现应该计算第二个表达式:
(c > d ) ? ( d > a ) : c
这一步我们发现c>d为假,所以取第三个表达式,就是c,那么最终结果也就是c。

将这个表达式作为一个整体,就不会出错了。

四、逗号运算符

(exp1,exp2,exp3,exp4…)

这个就是逗号表达式了,注意,里面同样的,可以有很多表达式。

逗号表达式的特点:表达式从左向右依次计算,是最后一个表达式的结果

int main()
{
	int a = 3;
	int b = 20;
	int c = 0;
	int d;
	d = (a -= 3, b += a, c = a - b, b = a - 4);
	//计算下来 a = 0, b = 20 , c = -20 , b = -4
	printf("%dn", d);
	//逗号表达式的特点:表达式从左向右依次计算,是最后一个表达式的结果
	return 0;
}

所以这段代码的最终结果也就是-4。

五、初等运算符–下标引用,函数调用和结构体成员

()这个是函数调用使用的运算符

int main(){......}

[]这个是下标引用运算符,一般用于数组的 *** 作

int arr[10] = { 0 };
int b = arr[5];
printf("%dn",b);

[ . ]是结构体成员访问:

#include
typedef struct StudentInfo {
	int age;
	char *name;
	char *ID;
}StudentInfo;
StudentInfo s;
int main()
{
	s.age = 20;
	s.name = "xiaohong";
	s.ID = "98765432112345";
	printf("%d %s %sn", s.age, s.name, s.ID);	
	return 0;
}

[ -> ]是结构体指针成员的访问:

#include
#include
typedef struct StudentInfo {
	int age;
	char *name;
	char *ID;
}StudentInfo;
StudentInfo s;
int main()
{
	StudentInfo* ps = &s;
	ps->age = 19;
	ps->name = "xiaoming";
	ps->ID = "12345678901234";
	printf("%d %s %sn",ps->age,ps->name,ps->ID);
	return 0;
}

== 至于 [ -> ]和 [ . ] 这两个 *** 作符的更加详细的说明,我们会在结构体的文章里说明。==

六、位运算符

位运算就是基于二进制的运算,一般用的不是很多(笔者有一篇哈夫曼压缩的文章,用到了位运算)
按位与运算符【&】
按位异或运算符【^】
按位或运算符【|】
左移动运算符【<<】
右移动运算符【>>】
我们用实际代码和来说明这些运算符的作用:

int main()
{
	int a = 1;
	int b = 4;
	printf("%dn", a & b);//0
	printf("%dn", a ^ b);//5
	printf("%dn", a | b);//5
	int c = 2;
	printf("%dn", c << 2);//8
	printf("%dn", c >> 2);//0
	return 0;
}

这些代码后面已经跟上了结果,现在我们来分析一下结果:
由于位运算基于二进制,所以我们先看看a,b,c的二进制都是多少:
a – 00000001
b – 00000100
c – 00000010
现在我们来看一看a&b是什么,
a&b,也就是一个新的二进制:00000000,这个二进制数的值是0
之后是a^b,异或,就是两个不一样就取1,两个一样就取0(一男一女生孩子):
a^b,新的二进制是:00000101,这个二进制数的值是5
之后是“按位或”,”按位或“是能取啥就取啥,有1就一定取:
a|b,新的二进制是: 00000101,值也是5(注意区分它和异或的区别)

然后就到了位移运算,这个就相对简单一点,
c << 2,数字左移2位,二进制就变成了 00001000,也就是8,
c >> 2,数字右移2位,二进制就变成了 00000000,也就是0。

今天的分享也就到这里了,希望带来了帮助!也祝大家小年快乐!
至此,我们就把C语言中所有能见到的运算符给说了一遍,欢迎指正批评哦!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713521.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存