千家信息网

C语言有哪些操作符

发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,这篇文章将为大家详细讲解有关C语言有哪些操作符,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.单目操作符之前有了解到的三目操作符(?:),指的是有三个操作数例如:
千家信息网最后更新 2025年11月16日C语言有哪些操作符

这篇文章将为大家详细讲解有关C语言有哪些操作符,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1.单目操作符

之前有了解到的三目操作符(?:),指的是有三个操作数

例如:3+5

其中,+是一个操作符

3是左操作数

5是有操作数

+则是一个双目操作符

那么什么是单目操作符呢,也就是只有一个操作数的

我们常见的操作符有:

这里我们来详细介绍一下sizeof、~、++与--

1.sizeof

sizeof常用来计算类型的长度,比如数组类型,int、char、short等等。同时,sizeof是操作符,不是函数,所以后面的括号可以省略。但算类型长度的时候不能省,这是语法要求。

下面就是sizeof一些常用的用法

#includeint main(){        //sizeof        int a = 10;        printf("%d\n", sizeof(a));        printf("%d\n", sizeof(int));        printf("%d\n", sizeof(float));        printf("%d\n", sizeof(double));         int arr[10] = { 1,2,3,4,5,6,7 };        printf("%d\n", sizeof(arr));        printf("%d\n", sizeof(int[10]));//计算整个数组的长度         printf("%d\n", sizeof a);        //printf("%d\n", sizeof int);这样写是会报错的          return 0;}

计算出的结果如下:

2.~

~的主要作用就是对一个数的二进制按位取反,但同样的,最后打印出来的是原码

#includeint main(){    int a = 0;        //~按(内存中补码的2进制)位取反        //00000000000000000000000000000000        //11111111111111111111111111111111 - 补码        //11111111111111111111111111111110 - 反码        //10000000000000000000000000000001 - 原码 --> -1         printf("%d\n", ~a);         return 0;}

运行结果如下:

这里有个~的应用:

怎样将一个数进行复原

#includeint main(){    int a = 10;        a |= (1 << 2);        printf("%d\n", a);        a &= ~(1 << 2);        printf("%d\n", a);    return 0;         //如果只想把倒数第三个数,也就是0改为1,可以进行以下操作        //00000000000000000000000000001010        //00000000000000000000000000000100   1<<2(用a与1<<2异或来实现)        //00000000000000000000000000001110        //11111111111111111111111111111011   ~(1<<2)(要想将a复原,就是再将倒数第三个数变为0)        //00000000000000000000000000001010}

3.++与--

这里主要注意的是分前置与后置

前置++/--:先加/减再使用

后置++/--:先使用再加/减

a每加一次就会记录,总共加了两次,所以是3。

对于b,先使用了a的值再对a进行++,所以是1.

到c这里,a实际上已经变成2了,而c是先对a进行加1再用它的值,所以c为3。

4.*(解引用操作符)

#includeint main(){    int a = 10;        int* pa = &a;        *pa = 20;//通过*来访问a的地址        printf("%d\n", a);        printf("%d\n", *pa);//此时的*pa就是a的值         int* px = &*pa;//px通过*来访问*pa,也就是访问a        *px = 30;        printf("%d\n", a);    return 0;}

2.关系操作符

3.逻辑操作符

(只关注变量的真假)

来看一道360的笔试题,判断一下程序输出的结果是多少。

我们先来看下第一种,a是先使用再进行++,这里a是0,是0则为假,那么后面的就都不要看了,还是原来的结果,但a进行了++

再看第二种,先打个比方,我想让张三或者李四,一个来我办公室,张三来了,那李四来不来就已经无所谓了,这里也是一样,a先使用再++,则a=0,表示没有人来,没人来就继续进行,b是先++再使用,b=3,为真,就是有人来了,有人来了以后,后面的来不来都无所谓,所以d就不再进行,最后输出的结果就是1334.

做个小总结:&&---左操作数为假,右边不计算 ||---左操作数为真,右边不计算

4.条件操作符

(也叫三目操作符--->exp1 ? exp2 : exp3 )

#includeint main(){    int a = 10;        int b = 20;        int max = 0;        /*if (a > b)                max = a;        else                max = b;*/         max = (a > b ? a : b);//与上面那段代码等价    return 0;}

5.逗号表达式

逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式从左向右依次执行。整个表达式的结果是最后一个表达式的结果。 首先,我们来分析一个代码: 下面输出的c是多少?

int a = 1;        int b = 2;        int c = (a > b, a = b + 10, a, b = a + 1);

我们来看括号里面的式子,像a>b、a这样子的对a和b毫不起作用,可以直接忽略掉,然后a=b+10,这里a变成了12,最后b=a+1=13.所以结果是13.

不难发现,最后起作用的是最后一个表达式的结果。

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

1. [ ] 下标引用操作符

操作数:一个数组名+一个索引值

2.( )函数调用操作符

接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

#include void menu(){    printf("*************************\n");        printf("******    hello    ******\n");        printf("******   friends   ******\n");        printf("*************************\n");} int main(){    menu();    return 0;}

3.访问一个结构的成员

. 结构体.成员名

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

#include struct Stu{    char name[10];    int age;    double score;}; int main(){    struct Stu s = { "zhangsan",20,85.5 };        //.        printf("%s %d %.1lf\n", s.name, s.age, s.score);        //->        struct Stu* ps = &s;        printf("%s %d %.1lf\n", (*ps).name, (*ps).age, (*ps).score);        printf("%s %d %.1lf\n", ps->name, ps->age, ps->score);    return 0;}

这三种情况输出的结果一样,感兴趣的同学可以自己去试一下!

7.隐式类型转换

例如:

#includeint main(){    short s = 20;        int a = 5;        printf("%d\n", sizeof(s = a + 4));        printf("%d\n", s);    return 0;}

sizeof输出的结果是2,这里面int型的a被转化为short型。

8.操作符的属性

复杂表达式的求值有三个影响的因素:

1.操作符的优先级

2.操作符的结合性

3.是否控制求值顺序

两个相邻的操作符先执行哪个,取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。

// 表达式的求值部分由操作符的优先级决定。

// 表达式 1

a * b + c * d + e * f

在计算的时候,由于*比+的优先级高,只能保证,*的计算是比+早,但是优先级并不

能决定第三个 * 比第一个 + 早执行。

// 表达式2

c + -- c ;

同上,操作符的优先级只能决定自减-- 的运算在 + 的运算的前面,但是我们并没有办法得 知,+操作符的左操作数的获取在右操作数之前还是之后求值,所以结果是不可预测的,是有歧义 的。

// 代码 3- 非法表达式

int main ()

{

int i = 10 ;

i = i -- - -- i * ( i = - 3 ) * i ++ + ++ i ;

printf ( "i = %d\n" , i );

return 0 ;

}

关于"C语言有哪些操作符"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

操作符 操作数 结果 表达式 就是 优先级 函数 输出 个数 成员 类型 结构 逗号 三个 也就是 代码 作用 数组 篇文章 长度 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北京数通互联网科技有限公司 滦州口碑好的软件开发常见问题 虚拟机服务器换系统 服务器的散热风扇可以少插几个吗 后台软件开发岗常见问题 百旺服务器出现内部错误 腾讯云服务器销售挣钱吗 steam森林怎么开联机服务器 周村陶瓷软件开发价格 数据库长度255啥意思 服务器运维周报 数据库设计 复合主键 三级网络技术考试安装序列号 软件开发背景工具 中国民航导航数据库管理培训 明日之后密斯卡镇服务器怎么赚钱 幻想三国帅才数据库 数据库可以用来做系统集成吗 nvr存储服务器 qq网吧服务器 宽带显示服务器无响应是什么回事 京东云服务器怎样查看进程 软件开发联合方式的优点有 信息网络安全的核心和关键 vs web服务器 网络安全手抄报注意句子 华为软件开发云企业版套餐 租用美国云服务器 qq游戏服务器 公安部网络安全长城行动
0