欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > C-操作符

C-操作符

2025/2/25 20:04:43 来源:https://blog.csdn.net/Dovis5884/article/details/144170307  浏览:    关键词:C-操作符

操作符种类

在C语言中,操作符有以下几种:

算术操作符

移位操作符

位操作符

逻辑操作符

条件操作符

逗号表达式

下标引用,函数调用

拓展:整型提升

我们介绍常用的几个

算术操作符

+(加),-(减),*(乘),/(除),%(取余操作符)

我们直接看列子

#include<stdio.h>
int main()
{int a = 5;int b = 5;printf("%d\n", a + b);printf("%d\n", a - b);printf("%d\n", a * b);printf("%d\n", a / b);printf("%d\n", a % b);return 0;
}

 这里我们需要特别注意的是/(除号)跟%(取余操作符)

“%”取的是余数

“/”取的是整除的结果

移位操作符(不可以进行负数移动并且只能是整数)

针对的是转化后的二进制:

“<<”左移操作符,左边舍去一位,右边补0

“>>”右移操作符,左边用0补充,右边舍弃一位

来看左移操作符列子:

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

 先将10转化为二进制,然后左移一位,右边补0,得到20

右操作符与左操作符原理一样 

位操作符

“&”按位与,计算规则:有0为0,两个都是1才是1

“|”按位或,计算规则:有1为1,两个同时为0才是0

“^”按位异或,计算规则:相同为0,相异为1

#include <stdio.h>
int main()
{int num1 = 1;int num2 = 2;printf("%d\n",num1 & num2);//第一个printf("%d\n",num1 | num2);//第二个printf("%d\n",num1 ^ num2);//第三个return 0;
}

面试题目:

不创建第三个变量,来交换两个变量的值

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

 

上面图的下面红色字是计算思路

赋值操作符 

“=”一个等号就是赋值

这里延伸复合赋值操作符,就是有两个操作符组成,右边是等号,左边是一个操作符

“<=”,a <= b

“+=”,a+=b,就是a=a+b

……

单目操作符

“!”逻辑反操作

“-”负值

“+”正值

“&”取地址

“sizeof”求操作数长度,以字节为单位

“*”通常用在指针中

“++”加加,a++(先使用,再加一),++a(先加一,再使用)

“--”减减,同加加同理

展示

#include <stdio.h>
int main()
{int a = -10;int* p = NULL;printf("%d\n", !2);printf("%d\n", !0);a = -a;p = &a;printf("%d\n", sizeof(a));printf("%d\n", sizeof(int));printf("%d\n", sizeof a);return 0;
}
sizeof和数组

首先看列子:

#include <stdio.h>
void test1(int arr[])
{printf("%d\n", sizeof(arr));//(2)
}
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));//(1)printf("%d\n", sizeof(ch));//(3)test1(arr);test2(ch);return 0;
}

如果将数组传过去进行sizeof求大小,那么求的只是那个指针的大小,不区分char,int类型

在“X86”环境中求的是4,在“X64”环境中求的是8

关系操作符

“>” 大于

“<”小于

“>=”大于等于

“<=”小于等于

“!=”不等于

“==”判断相等

逻辑操作符

“&&” 并且,必须要所有条件满足计算才会停下来,否则返回0

“||”或者,仅需满足一个条件,计算就会停下来

列题:

#include <stdio.h>
int main()
{int i = 0, a = 0, b = 2, c = 3, d = 4;i = a++ && ++b && d++;//i = a++||++b||d++;printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);return 0;
}

a=1,b=2,c=3,d=4

因为a=0,代入表达式,0为假,计算停止,后面的表达式也就不再继续

条件操作符

(ese ? es1 : es2),首先计算ese表达式,如果为真,答案就是es1,如果为假,答案就是es2

逗号表达式

(es1,es2,es3,es4,es5) 从左到右,依次进行,整个表达式,是最后一个表达式的结果,碰到假的表达式就跳过

下标引用,函数调用

下标引用(数组下标从0开始),如果有10个元素,最后一个元素的下标是9

int arr[10];//创建数组arr[9] = 10;//实用下标引用操作符。

函数调用(就是调用一个函数)
 

#include <stdio.h>void test1(){printf("hehe\n");}void test2(const char *str){printf("%s\n", str);}int main(){test1();            //实用()作为函数调用操作符。test2("hello bit.");//实用()作为函数调用操作符。return 0;
}
整型提升
#include<stdio.h>
int main()
{char a = 3;char b = 127;char c = a + b;printf("%d\n",c );return 0;
}

 

 我们来看解析:

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词