IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言操作符详解 -> 正文阅读

[C++知识库]C语言操作符详解

操作符分类

算术操作符		+ - * / %
移位操作符		>>  <<
位操作符		| & ^
赋值操作符		=
单目操作符		! & ...
关系操作符		> >= < <= != ==
逻辑操作符		&&  ||
条件操作符		exp1 ? exp2 : exp3
逗号表达式		exp1, exp2, exp3, …expN
下标引用		[]
函数调用		()

算术操作符

+ - * / % --就是加减乘除和取模。要注意取模得到的是余数,除了 % 取模运算符外,其它操作符都能对整数和浮点数进行运算。

移位操作符

移位操作符移动的都是二进制位。

<<   左移操作符
>>   右移操作符

左移操作符

左移操作符就是向左移动,右边补0,比如 3 ,二进制的有效位是 00000011,左移之后的结果就是 00000110 是 6。代码如下:

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

左移之后,数值变成了原来的二倍,我们可以多试几组数据,尝试得到一个结论:

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

通过上面两个例子,我们可以得出一个结论:向左移一位,就会把结果乘 2 ,继续推断可知,左移 n 位,就是把结果乘 2^n 。

右移操作符

右移操作符的移位方式是算术右移,就是左边用原值的符号位填充,右边丢弃。

int main()
{
	int a = 80;
	int b = a >> 1;
	printf("%d\n", b);		//40
	return 0;
}
int main()
{
	int a = 80;
	int b = a >> 3;
	printf("%d\n", b);		//10
	return 0;
}

经过上面这两个代码,我们依然可以验证我们的结论:右移 n 位,就是把结果除 2^n 。

位操作符

位操作符包括 &(按位与) |(按位或) ^ (按位异或),操作的也是二进制位。

按位与 &

两个数对应的二进制位都是 1 ,那么按位与的结果也是 1 ,有一个为 0 ,结果为 0 。这里拿 3 和 5 举例。3 对应的的二进制的有效位是 00000011 ,5 对应的二进制的有效位是 00000101 ,所以按位与的结果就是 1 。

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

在这里插入图片描述
再结合图片,就能很好理解了。

按位或 |

按位或也是对两个数的二进制位进行操作,两个数对应的二进制位,只要有一个 1 ,结果就为 1 。继续拿 3 和 5 举例。3 的有效二进制位是 00000011,5 的二进制的有效位是 00000101,按位或之后就是 00000111 是 7 。

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

在这里插入图片描述
从图片上面就很好理解了。

按位异或 ^

按位异或就是两个数对应的二进制位相同则为 0 ,相异则为 1 。继续拿 3 和 5 举例,00000011,00000101,所以结果就是 00000110,结果是 6 。

在这里插入图片描述

赋值操作符

赋值操作符有如下

+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^=

这些操作符的效果都类似于下面这样:

int x = 10;
x = x+10;
x += 10;		 += 的意思和 + 是一样的 所以这个式子和上面的式子是一样的

单目操作符

单目操作符就是符号两边的操作数只有一个。

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

逻辑反操作:比如原来为真,逻辑反操作之后就为假了。原来为假的话,逻辑反操作之后就是 1 ,0 表示假,一切的非 0 表示真。

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

在这里插入图片描述
要注意两个 + 不能使负数变为正数。

sizeof 和 数组

sizeof 作为一个操作符,是求元素所占字节大小的,sizeof(数组名),求的是整个数组的大小,与 strlen 不同的是,strlen 算的是有几个字符,而 sizeof 算的是所有的大小,不关注内容,只关注大小。

int main()
{
	char arr[] = "abcdef";
	int sz = sizeof(arr) / sizeof(arr[0]);
	int len = strlen(arr);
	printf("%d\n", sz);				//7	
	printf("%d\n", len);			//6
	return 0;
}

sizeof 等于 7 是因为字符串结束的标志是 ‘\0’ 所以求出来是 7,而字符串只有 6 个,所以 strlen 是 6。

关系操作符

关系操作符就是常见的比较大小的操作符。

>
>=
<
<=
!=  	 用于测试“不相等”
==    	 用于测试“相等”

逻辑操作符

逻辑操作符有 &&(逻辑与) ||(逻辑或)

逻辑与:就是符号两边都为真,结果才为真。
逻辑或:就是符号两边有一个为真,结果就为真。

int main()
{
	int a = 3;
	int b = 5;
	int c = 0;
	if (a > 0 && b > 0)
	{
		printf("逻辑与操作符\n");
	}
	if (a > 0 || c > 0)
	{
		printf("逻辑或操作符\n");
	}
	return 0;
}

在这里插入图片描述
通过图片可知结果都输出了,可以更方便的理解。

条件操作符

条件操作符 exp1 ? exp2 : exp3 又叫三目操作符。当表达式 1 成立的话,就执行表达式 2 ,表达式 1 为假的话,就执行表达式 3 。

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

因为 a > b 判断为假,所以执行表达式 3 ,c 的值就等于 b 了,所以 c j就是 5 。

逗号表达式

exp1, exp2, exp3, …expN 多个表达式用逗号隔开,从左到右执行。最后一个表达式的结果是整个表达式的结果。

int main()
{
	int a = 3;
	int c = (a + 1, a + 1, a + 1, a + 1, a + 1);
	printf("%d\n", c);			//4
	return 0;
}

这里输出的是 4 因为逗号表达式的最后一个式子是 a+1 所以结果是 4 。因为 a 的值并没有被改变,所以是 4 。如果把逗号表达式都变成 a += 1 这样的结果就是 8 ,因为每次都把 a 的值改变了。

下标引用和函数调用

下标引用操作符 []

用于数组当中,因为数组是通过下标来访问的。数组的下标是从 0 开始的。

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

因为下标是从 0 开始访问的,所以输出的就是 10 。

函数调用操作符()

函数调用操作符就是还有传多个参数,也可以不传参数。

void test2(int x)
{
	printf("%d\n", x);
}
void test1()
{
	int a = 5;
	test2(a);
}
int main()
{
	test1();
	return 0;
}

从 main 函数开始,先调用 test1 函数,没有传参数,再从 test1 函数里面调用 test2 然后传参,test2 函数用 x 来接收,并且打印出来。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-04 11:00:48  更:2021-08-04 11:01:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 17:22:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码