文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言有哪些操作符

2023-06-29 02:59

关注

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

1.单目操作符

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

例如:3+5

其中,+是一个操作符

3是左操作数

5是有操作数

+则是一个双目操作符

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

我们常见的操作符有:

C语言有哪些操作符

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

1.sizeof

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

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

#include<stdio.h>int main(){//sizeofint 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;}

计算出的结果如下:

C语言有哪些操作符

2.~

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

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

运行结果如下:

C语言有哪些操作符

 这里有个~的应用:

怎样将一个数进行复原

#include<stdio.h>int 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.++与--

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

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

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

C语言有哪些操作符

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

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

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

4.*(解引用操作符)

#include<stdio.h>int 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;}

C语言有哪些操作符

2.关系操作符

C语言有哪些操作符

3.逻辑操作符

(只关注变量的真假)

C语言有哪些操作符

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

C语言有哪些操作符

C语言有哪些操作符

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

C语言有哪些操作符

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

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

4.条件操作符

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

#include<stdio.h>int main(){    int a = 10;int b = 20;int max = 0; 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.下标引用、函数调用和结构成员

[  ] 下标引用操作符

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

C语言有哪些操作符

 2.( )函数调用操作符

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

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

 3.访问一个结构的成员

. 结构体.成员名

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

#include<stdio.h> 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.隐式类型转换

例如:

#include<stdio.h>int 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

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯