c语言---7 初识操作符

本文详细介绍了C语言中的算术操作符,位移操作符,位操作符,赋值操作符,单目操作符,以及它们在实际编程中的应用。讨论了逻辑反操作、位移、按位取反、前置和后置递增/递减等概念,并通过实例解释了其工作原理。此外,还提到了强制类型转换、关系操作符、逻辑操作符、条件操作符、逗号表达式和数组、函数调用的相关知识点。
摘要由CSDN通过智能技术生成

1、算术操作符

算术操作符包括+ - * / %(加、减、乘、除、取模/取余)

#include <stdio.h>
//操作符
int main()
{
	int a = 9 / 2;
	printf("%d\n",a);
	return 0;
}

将语句int a = 9 / 2;printf("%d\n",a);改为float a = 9 / 2; printf("%f\n",a);,运行结果从4变为4.000000,始终算不出来4.5,因为C语言中的除法只计算商,不计算余数,也不会算出小数。所以9/2=4,若想要求出精确的结果,可以将除号两端任意一个数字改为小数,就可以得到准确结果了。
在这里插入图片描述

2、位移操作符

位移操作符包括<<(左移)>>(右移)

int main()
{
	int a = 2;
	int b = a << 1;
	printf("%d\n",b);
	return 0;
}

运行结果为4.因为左移操作符移动的是二进制位。a=2----》表示为二进制是10,由于a是存放到整型里面的,整型所占的内存大小是4个字节,4个字节是32个比特位,所以:
在这里插入图片描述
左移一位之后,最左边的0丢失,在最右边补零,变为
00000000 00000000 00000000 00000100,表示为十进制为4。(左移时,最后一位永远补零)

3、位操作符

位操作符包括按位与&按位或|按位异或^

4、赋值操作符

赋值操作符包括:= += -= *= /= &= ^= |= >>= <<=

5、单目操作符

!逻辑反操作
-负值
+正值
&取地址
*间接访问操作符(解引用操作符)
sizeof操作符的类型长度(以字节为单位)
~对一个数的二进制按位取反
前置、后置–
++前置、后置++
类型强制类型转换

说明:对于“a+b”来说,“+”有2个操作数,故为双目操作符;单目操作符只有一个操作数。
(1)逻辑反操作
在C语言中有规定:0表示假,非0就是真。

int main()
{
	int a = 10;
	printf("%d\n",!a);
	return 0;
}

运行结果为:0.因为10为真,故!10为假,所以运行结果为0.

int main()
{
	int a = 0;
	printf("%d\n",!a);
	return 0;
}

运行结果为1.当把假变成真的时候,真的数有很多,规定结果为1.
“!”的真正用法是:

int main()
{
	if (a)
	{
		//当a为真,要执行什么操作
	}
	if (!a)
	{
		//当a为假,又要执行什么操作
	}
	return 0;
}

(2)sizeof是一个操作符,用来计算变量或类型的大小。

int main()
{
	int a = 10;
	printf("%d\n",sizeof(int));
	printf("%d\n", sizeof(a));
	return 0;
}

运行的结果都是4,因为a的类型是int类型。
printf("%d\n", sizeof(a));中sizeof后面的括号可以省略,意味着sizeof是操作符,不是函数。但是函数后面的括号是不可以省略的。sizeof求变量的话,括号可以省略,但求类型的时候,括号不可以省略,如:sizeof(int)。 可是在通常情况下,使用sizeof的时候,括号都不省略。
思考:sizeof是否能计算数组的大小呢?

int main()
{
	int arr[10] = { 0 };
	printf("%d\n",sizeof(arr));
	printf("%d\n", sizeof(arr[0]));
	int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
	printf("%d\n",sz);
	return 0;
}

运行结果为:

40
4
10

因为定义的数组是包含10个0元素的数组,而这10个0零元素每一个都是一个int类型,每个int类型都是4个字节,所以对于整个数组来说,它的长度就是10x4等于40个。对于数组中的第一个元素来说,它的长度是4个字节。
(3)按位取反
“~”为按位取反,按二进制位取反,将所有的二进制位都取反,1变为0,0变为1.

int main()
{
	int a = 0;
	printf("%d\n",~a);
	return 0;
}

运行结果为:-1
在这里插入图片描述
对于正整数来说,其原码、补码、反码都是一样的。
(4)前置++、后置++

int main()
{
	int a = 10;
	int b = ++a;//前置++:先++,后使用
	printf("%d\n",a);
	printf("%d\n", b);
	return 0;
}

运行结果为:

11
11

前置++:先让a执行++操作,然后再将此时a的值赋给b,所以运行结果均为11

int main()
{
	int a = 10;
	int b = a++;//后置++:先使用,后++
	printf("%d\n", a);
	printf("%d\n", b);
	return 0;
}

运行结果为:

10
11

后置++:先把a的值赋给b,然后a再执行++操作。
(5)括号里面放入类型–》“(类型)”为强制类型转换

int main()
{
	int a = 3.14;
	printf("%d\n",a);
	return 0;
}

运行该程序的时候,虽然不会报错,但是会警告:warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据
int a = 3.14;改为int a = (int)3.14;即可正确运行。

6、关系操作符

关系操作符包括:> >= < <= !=(用作测试“不相等”) ==(用作测试“相等”)

7、逻辑操作符

逻辑操作符包括&&(逻辑与)、||(逻辑或)

int main()
{
	int a = 3;
	int b = 5;
	int c = a && b;
	printf("%d\n",c);
	return 0;
}

运行结果为:1,因为3与5都是真,所以两者作“逻辑与”操作的结果也是真。
若将b=5改为b=0,则结果为0
int c = a && b;改为int c = a|| b;,则运行结果仍为1.

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

exp1?exp2:exp3,意为exp1成立,则计算exp2,整个表达式的结果是exp2的结果;若exp1不成立,则整个表达式的结果是exp3的结果。

int main()
{
	int a = 0;
	int b = 3;
	int max = 0;
	if (a > b)
		max = a;
	else
		max = b;
	printf("%d\n", max);
	return 0;
}

这段代码中的if else结构就可以写作:

max = a > b ? a : b;

9、逗号表达式

逗号表达式是用逗号隔开的一段表达式exp1,exp2,...,expN,逗号表达式的特点是会从左向右依次计算,整个逗号表达式的结果是最后一个表达式的结果。

int main()
{
	int a = 0;
	int b = 3;
	int c = 5;
	int d = (a = b + 2, c = a - 4,b=c+2);
	printf("%d\n",d);
	return 0;
}

运行结果为a3.运行完此段代码之后,a=3+2=5;c=5-4=1;b=c+2=1+2=3

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

[] () . ->

int main()
{
	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	printf("%d\n",arr[5]);
	return 0;
}

这段代码中的arr[5]的方括号就是下标引用操作符。
再有就是在调用函数的时候,函数名后边的()就是函数调用操作符,比如printf("hello\n")

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值