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

操作符分类

操作符可以分为:
算数操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号操作符
下表引用、函数调用和结构成员
(一)算数操作符
加(+) 减(-) 乘 (*)除(/ ) 取模(%)
新手要注意的一点就是,整数乘除法运算只能得到整数。
(二)移位操作符

int a =16;
//>> 右移操作符
//移动的是二进制位
int b =a>>1;

右移操作符:
1.算数右移
右边丢弃,左边补原符号位
2.逻辑右移
右边丢弃,左边补0
在这里插入图片描述
警告:
对于移位运算符,不要移动负数位。这个是标准定义的,什么意思呢,举个栗子:

int main =10;
num>>-1;//error

(三)位操作符
1) ‘&’ 按照二进制位与,全为1结果才为1,否则为0。

int main()
{
//& 按二进制位与
int a = 3;
int b =5;
int c =a&b;
//00000000 00000000 00000000 00000011
//00000000 00000000 00000000 00000101
//00000000 00000000 00000000 00000001
printf("%d\n",c);
return 0;
}

在这里插入图片描述
可能你会问,为什么01存在了最前面,而不是向我们写的那样的顺序存储?
这就涉及到计算机的大端存储与小端存储,我会在后面博客讲述该内容,这里我们只需要知道按位与是如何工作的就可以了。
2)‘|’ 按二进制或,全0为0,否则为1。‘|’和‘&’是对冤家,两个反着来的。

//按二进制位或
int main()
{
int a = 3;
int b = 5;
int c = a|b;
//00000000 00000000 00000000 00000011
//00000000 00000000 00000000 00000101
//00000000 00000000 00000000 00000111
return 0;
}

在这里插入图片描述
3)按2进制位异或,相同为0,相异为1。

int main()
{
//按二进制位异或
//相同为0,相异为1
int a =3;
int b =5;
int c =a^b;
printf("%d\n",c);
//00000000 00000000 00000000 00000011
//00000000 00000000 00000000 00000101
//00000000 00000000 00000000 00000110
return 0;
}

在这里插入图片描述
4)‘~’按二进制位取反

1变成0,0变成1。青春期有些小叛逆。这里就不举例子了。

拓展:你知道怎么求二进制位中有几个1吗?

int main()
{
int num = 0;
int count = 0;
scanf("%d",&num);//3
//统计num的补码中有几个1
while(num)
{
if (num %2 == 1)
count++;
num = num/2;
}
printf("%d\n",count);
return 0;
}

在这里插入图片描述
5)复合位操作符

int main()
{
int a =11;
a = a |(1<<2);
printf("%d\n",a);//输出15
a =a & (~(1<<2));
printf("%d\n",a));//输出11
return 0;
}

(四)(复合)赋值符
±
-=
*=
/=
%=

=
<<=
&=
|=
^=
举栗子:
32位操作系统
//short int 2字符 int 4字符

int main()
{
	short s = 0;
	int a = 10;
	//sizeof是计算占字节大小的,长度运算符,也是
	//单目操作符
	printf("%d\n", sizeof(s = a + 5));//输出2
	printf("%d\n", s);//输出0
	return 0;
}

为什么s输出的0呢?
其实这是因为sizeof括号里面的不直接运算,也就是输出的s还是0.
1)前置++ 与后置++的区别
前置++,先加厚使用,后置++,先使用后++。看栗子:

int main()
{
int a =10;
//printf("%d\n",++a);//输出11
printf("%d\n",a++);//输出10
 return 0;
}

2)强制类型转换(类型),注意:给类型加括号

int main()
{
int a = (int)3.14;
return 0;
}

(五)关系操作符

 >=     <      <=        !=       ==

这个就很简单了,大家应该都是知道的
(六)逻辑操作符
&&逻辑与
|| 逻辑或
!逻辑非
(七)条件操作符
exp? exp:exp
栗子

int main()
{
int a = 0;
int b = 0;
if (a>5)
b=3;
else
b =-3;
//b =(a>5? 3:-3);效果与上面if语句类似
return 0;
}

(八)逗号操作符(很容易搞错的地方,一定要引起重视)
代码1输出结果为b(最后一个),代码2d>0为条件

//代码1
int a =1;
int b = 2;
int c =(a>b,a=a+10,a,b =a+1);
//c是多少
//代码2
if(a =b +1,c = a/2,d>0)

(九)结构体

struct Stu
{
	char name[10];
	int age;
	char id[20];
};
int main()
{
	int a = 10;
	//使用struct Stu这个类型创建了一个学生对象s1,并初始化
	struct Stu s1 = { "张三",20,"202110305" };
	struct Stu* ps =&s1;

	printf("%s\n", ps->name);
	printf("%d\n", ps->age);
	//结构体指针->成员名
	//相当于
	printf("%s\n", (*ps).name);//这里括号不能省
	printf("%d\n", (*ps).age);
	//或者
	printf("%s\n", s1.name);
	printf("%d\n", s1.age);
}

拓展:整形提升
c的整形算数运算符总是至少以缺省整形类型的精度来进行的。
什么意思呢?
为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换就叫做整型提升
看例子:

int main()
{
	char a = 3;
	//00000000 00000000 00000000 00000011
	//00000011  a

	char b = 127;
	//00000000 00000000 00000000 01111111
	//01111111  a
	// a和b如何相加
	//00000000 00000000 00000000 00000011
	//00000000 00000000 00000000 01111111
	//00000000 00000000 00000000 10000010
	char c = a + b;
	//1000010 c
	//11111111 11111111 11111111 10000010 补码
	//11111111 11111111 11111111 10000001 反码
	//10000000 00000000 00000000 01111110 原码
	//-126
	printf("%d\n", c);
	return 0;
}

整形提升示例,只会输出c、a、b(16进制)运算会发生整形提升,值会变化。

int main()
{
char a =0xb6;//10110110//11111111 11111111 11111111 //10110110
short b =0xb600;
int c = 0xb6000000;
if(a==0xb6)
{
printf("a");
}
if(b==0xb600)
{
printf("b");
}
if(c==0xb6000000)
{
printf("c");
}
return 0;
}

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:20:39  更:2021-11-23 12:23:52 
 
开发: 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年11日历 -2024/11/27 4:24:05-

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