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语言操作符

? ? ? ??

目录

操作符的分类

算术操作符

移位操作符

左移操作符规则

右移操作符

注意:移位操作符不能移动负数位。

位操作符

位操作符用法

? ?赋值操作符

复合赋值符

单目操作符

具体用法

?关系操作符

在这里注意“==”和“=”的区别

逻辑操作符

区分逻辑与和按位与,逻辑或和按位或

条件操作符

逗号表达式

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

[]下标引用操作符

()函数调用操作符接收一个或多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

结构成员


操作符的分类

算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员

算术操作符

+? ? ?-? ? ?*? ? ?/? ? ?%

注意事项:

1、除了%操作符外,其他几个操作符都可用于整数和浮点数的计算

2、/操作符,如果对整数进行运算,执行的是整数除法(得到的一定是整数);如果对浮点数进行运算,执行的是浮点数除法。详细例子如下:

? ? ? ? ? ? ??

?从上面可以看出,5/2? 和? 5/2.0? 具有不同的含义。

3、%操作符进行计算两个整数相除后得到的余数。

? ?比如:5%2=1;? ? ? ? ? ? ? 5%2.0(错误)

移位操作符

<<? ? 左移操作符

>>? ? ?右移操作符

注意:对二进制位进行移位

左移操作符规则

左边抛弃,右边补零。

比如:1? ?

其二进制位:00000000000000000000000000000001

? ? ? ? ? 1<<1:??00000000000000000000000000000010

得到的结果:2

右移操作符

右移操作符分为:逻辑移位 、 算术移位

1、逻辑移位:左边用0填充,右边丢弃。

比如:-1? ?

其二进制位:原码:10000000000000000000000000000001

? ? ? ? ? ? ? ? ? ? ?反码: 11111111111111111111111111111110

? ? ? ? ? ? ? ? ? ? ? 补码:11111111111111111111111111111111

? ? ? ? ? ? ? ? ? ? ?-1>>1:? 01111111111111111111111111111111

得到的结果:2^32-1

2、算术移位:左边用该原值的符号位补充,右边丢弃。

比如:-1? ?

其二进制位:原码:10000000000000000000000000000001

? ? ? ? ? ? ? ? ? ? ?反码: 11111111111111111111111111111110

? ? ? ? ? ? ? ? ? ? ? 补码:11111111111111111111111111111111

? ? ? ? ? ? ? ? ? ? ?-1>>1:? 11111111111111111111111111111111

得到的结果:-1

注意:移位操作符不能移动负数位。

比如:

? ? ? ? ? ?a>>= -1;? ? ? ? 这种写法是错误的。

位操作符

位操作符有:

&? ? 按位与

|? ? ? 按位或

^? ? ?按位异或

注:它们的操作数必须是整数。

位操作符用法

int num1=1;? ? ?int num2=2;

&:当对应的二进制位都是1时,得到1。

num1:00000000000000000000000000000001

num2:00000000000000000000000000000010

? ? ? ?a:00000000000000000000000000000000? ? ?

|:当对应的二进制位只要有一个是1时,得到1。

num1:00000000000000000000000000000001

num2:00000000000000000000000000000010

? ? ? ?a:00000000000000000000000000000011

^:对应的二进制位相异为1,形同位0。

num1:00000000000000000000000000000001

num2:00000000000000000000000000000010

? ? ? ?a:00000000000000000000000000000011? ?

综上;代码运行结果:

? ? ??

? ?赋值操作符

=? ? ? 可以给一个变量进行赋值给自己想要的值。

int a=1;

a=2;? ? ? ? 在这里之后,a=2了。

复合赋值符

+=

-=

/=

%=

>>=

<<=

&=

|=

^=

比如:+=符号

int a=10;

a+=1;? ? 等价于a=a+1;

来看一下效果;

单目操作符

!? ? 逻辑反操作

-? ? ? ?负值

+? ? ? ?正值

&? ? ? 取地址

sizeof? ? 操作数的类型长度(以字节为单位)

~? ? ? ? ? 对一个数的二进制位按位取反

--? ? ? ?前置、后置--

++? ? ?前置、后置++

*? ? ? ? ?间接访问操作符(解引用操作符)

(类型)? ? 强制类型转换

具体用法

!:将真条件变成假(0),将假条件变成真(非0)

具体实操:

?- 和 +:? ? ? -,将一个数变成负数和数学上意义一样? ? ? ? ? ?+,和数学上意义一样

? ? ? ? &:? ??取出某块空间的地址。

? ? ? ? ?*:通常和&一起使用,找到地址所指向空间存储的数据。

sizeof:求变量(类型所占空间的大小,单位是字节。

sizeof(arr):没有&,也没有+数字,在这里arr表示整个数组。大小为4*10=40

sizeof(ch):1*10=10

test1(arr):通过传参传过去的是地址,地址的·大小是4(32位平台)个或8(64位平台)个字节。

test(ch):通过传参传过去的是地址,地址的·大小是4(32位平台)个或8(64位平台)个字节。

#include <stdio.h>
void test1(int arr[])
{
	printf("%d\n", sizeof(arr));//4
}
void test2(char ch[])
{
	printf("%d\n", sizeof(ch));//4
}
int main()
{
	int arr[10] = { 0 };
	char ch[10] = { 0 };
	printf("%d\n", sizeof(arr));//40
	printf("%d\n", sizeof(ch));//10
	test1(arr);
	test2(ch);
	return 0;
}

~:比如:1

1的二进制位: 000000000000000000000001

~1:? ? ? ? ? ? ? 1111111111111111111111111110

则~1的反码:1111111111111111111111111101

? ?~1的原码:1000000000000000000000010? (-2)

--和++操作符:

#include<stdio.h>
int main()
{
?? ?int a = 10;
?? ?int b = a--; ? ?//先使用,再-- ? a先把10赋值给b,然后a--就变成了9
?? ?int c = --a; ? ?//先--,再使用 ? ?a先从9,++变成8,然后赋值给c
?? ?printf("%d\n", b); ?//10
?? ?printf("%d\n",c); ? //8

------------------------------------------------------------------------------------------------------------------------

?? ?int a = 10;
?? ?int b = a++; ? ?//先使用,再++ ? ?a先把10赋值给b,然后a++就变成了11
?? ?int c = ++a; ? ?//先++,再使用 ? ?a先从11,++变成12,然后赋值给c
?? ?printf("%d\n", b); ?//10
?? ?printf("%d\n", c); ? //12
?? ?return 0;
}

(类型):? a是浮点型,计算结果要得到整型,那么就(int)转换成整形

#include<stdio.h>
int main()
{
?? ?float a = 10.0;
?? ?int b =(int) (a / 3.0); ? ? ??
?? ?printf("%d\n", b);
?? ?return 0;
}

注意:如果不进行强制类型转换,会出现警告。

比如:

#include<stdio.h>
int main()
{
	float a = 10.0;
    //	int b =(int) (a / 3.0);
	int b = a / 3.0;         
	printf("%d\n", b);
	return 0;
}

?关系操作符

>

>=

<

<=

!=? ? 用于测试不相等

==? ?用于测试相等

在这里注意“==”和“=”的区别

逻辑操作符

&&? ? ?逻辑与

||? ? ? ? 逻辑或

区分逻辑与和按位与,逻辑或和按位或

非0表示真,&&? ||? 用来判断条件真假

1&2------------->0

1&&2----------->1? ? (真)&&(真)--->1

1|2-------------->3

1||2------------->1? ? ?(真)||(真)--->1

条件操作符

exp1 ? exp2 : exp3

exp1条件成立吗?如果成立返回exp2:如果不成立返回exp3

例如代码:

#include<stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int c = (a > b) ? a: b;
	printf("%d\n", c);
	return 0;
}

逗号表达式

exp1, exp2, exp3, …expN

得到的结果是最后一个逗号的运算结果

具体例子:

#include<stdio.h>
int main()
{
	int a = 1;
	int b = 2;
	int c = (a++, ++b, a + b);   //=的优先级比 , 要高,所以=后面要加括号
	printf("%d\n", c);
	return 0;
}

最后计算的结果是a+b的结果。

? ? ? ??

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

[]下标引用操作符

	int arr[10] = { 0 };   //创建数组
	arr[9]; //实用下标引用操作符
	[]的操作数是arr和9

()函数调用操作符接收一个或多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

#include <stdio.h>
void test1()
{
	printf("hehe\n");
}
void test2(const char* str)
{
	printf("%s\n", str);
}
int main()
{
	test1();                         //实用()作为函数调用操作符。
	test2("hello world.");  //实用()作为函数调用操作符。
	return 0;
}

结构成员

.? ?结构体.成员名

->? 结构体指针->成员名

具体内容如下:

#include<stdio.h>
#include<string.h>
struct Book
{
	char name[30];
	float price;
	char ID[20];
};
//用结构体常量来接收
void print1(struct Book b)   //结构体接收值
{
	printf("书名:%s\n", b.name);
	printf("价格:%f\n", b.price);
	printf("ID:%s\n", b.ID);
}
//用指针接收
void print2(struct Book* pb)
{
	printf("书名:%s\n", pb->name);
	printf("价格:%f\n",pb->price);
	printf("ID:%s\n", pb->ID);

	//写法二:
	printf("书名:%s\n", (*pb).name);
	printf("价格:%f\n", (*pb).price);
	printf("ID:%s\n", (*pb).ID);
}
int main()
{
	struct Book b = { "C语言程序设计",55.5f,"470220040" };
	//对结构体的内容进行修改
	//strcpy(b.name, "数据结构");   //right
	//strcpy(b.ID, "47022004");     //right
	//------------------对数组内容进行修改,要是用strcpy
	b.price = 100.0f;  //right
    // strcpy(b.price, 100.5f);    //err
    //-----------------对不是数组类型内容进行修改,要结构体.成员名进行赋值 
	//b.name = "数据结构";  //err
	//b.ID = "4700";    //err
	//strcpy((*pb).name, "数据结构");   //err
	//strcpy(pb->name, "数据结构");     //err
	print1(b);
	print2(&b);
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:26:28  更:2021-07-31 16:26:39 
 
开发: 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年4日历 -2024/4/27 16:46:17-

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