原标题:C语言运算符

一、前言

在嵌入式开发中,我们一般选用C语言作为开发语言。一个主要的原因在于C语言提供了大量的运算符,比如我们对硬件的操作一般涉及到对位的操作,而C语言就提供了这样的运算符,这是其他语言不具备的。

二、C语言运算符有哪些

C语言有大量的运算符,可大致分为以下几类:括号与结构体符号、单目、算术、移位、关系、位、逻辑、三目、赋值、逗号。

括号与结构体符号:括号包括()、[],结构体符号指的是结构体成员引用时的符号“->”、“.”,他们也是运算符,并且优先级与括号相当,这也是我们把两者放在一起讨论的原因。至于如何使用则是结构体的内容。

单目运算符:单目运算符有很多,例如:!逻辑非、~按位取反、++自增、--自减、+正、-负、&求地址运算符、*间址运算符、sizeof()求所占字节数、(类型名)强制类型转换。这些运算符的运算对象只有一个。其中&与*属于指针内容,我们不做细说。逻辑非我们在下面逻辑运算符时说明,按位取反我们在下面位运算符时说明,强制类型转换我们在格式转换时说明。Sizeof()首先不是函数,用于求类型的所占字节数。例如:int a;sizeof(a)或sizeof(int)得到的值都是4,即整型占4个字节。()中可以是变量也可以是数据类型也可以是字符串常量。例如:char ch[20]=”hello”;我们定义字符数组来保存字符串,当我们要求字符串长度时我们发现sizeof(ch)得到的大小为20,即数组的大小,那么怎么求字符串长度呢?我们可以用字符串的相关函数strlen(),但是也可以sizeof(“hello”);它的结果为6,即计算字符串最后的空字符’0’。++与--是我们经常用到的运算符,简单来说,有以下四种情况:

a=10,a++ ++在a的后面,先把a的值赋值给表达式,a在自加1。即 a=10,b=a,a=a+1

a=10,++a ++在a的前面,a先自加1,再把a的值赋值给表达式。即 a=10,a=a+1,b=a

a=10,a-- --在a的后面,先把a的值赋值给表达式,a在自减1。即 a=10,b=a,a=a-1

a=10,--a --在a的前面,a先自减1,再把a的值赋值给表达式。即 a=10,a=a-1,b=a

上例中a++/++a/a--/--a代表表达式,我们可以理解为:b=a++/b=++a/b=a--/b=--a

算术运算符:+、-、*、/、%。需要注意的是,在做相乘运算时,*不能省略。/表示除号,%表示取余。例:10/3=3 10%3=1 这里%是取10除以3后的余数,所以结果为1。要注意的是%左右两边必须都是整数。而10/3的结果为什么是3而不是3.3333呢?这里涉及到格式转换的知识,是我们格式转换部分要说的。

移位运算符:>> << 。移位运算符右移与左移是对位进行操作。例如:a=10,b=a>>1,

此例的意思是把数值a往右移动1位,把结果赋值给b。我们知道数据在内存中以二进制存放,10对应的二进制位1010,各位往右移一位得到0101,最右边的0被移出去,左边空的一位我们补0,所以b的值为0101,即5。这是右移,如果数据右边有足够多的0,我们可以往右移动多位,规律为往右移动移位相当于除以2,移动两位相当于除以2^2,移动n位相当于除以2^n.左移<

相当于把1010往左移两位变为10 1000,即b的值为40.我们发现在数值上相当于a*2^2。

所以我们的规律就是:往右移n位,相当于除以2^n 。往左移n位,相当于乘以2^n 。实际上我们就是用左移右移来代替乘除的,这样不需要计算与赋值过程,只需要将各位移动,更加快捷。

关系运算符:>大于、= 大于或等于、<=小于或等于、==等于、!=不等于。关系运算符用于比较大小,需要注意的是:1、关系运算符的写法。当要表示1010&&a<20。

&&是逻辑与运算符,表示并且。2、关系运算符的值是逻辑值。例如:a=10,b=20; a

如果关系成立,即逻辑为真,那么值就是1.如果关系不成立,即逻辑为假,那么值就是0.

逻辑运算符:&&逻辑与、||逻辑或、!逻辑非。逻辑运算符的值也是逻辑值,需要注意的是对数据来说非0为真,0为假。这三个运算符的关系为:

逻辑与:两个数据全为真的时候结果才为真

1 1 1

1 0 0

0 1 0

0 0 0

逻辑或:两个数据有一个为真结果就为真

1 1 1

1 0 1

0 1 1

0 0 0

逻辑非:!是单目运算符,非真为假,非假为真。!0结果是1,!-1结果是0,!1结果也是0

位运算符:按位与&、按位或、按位取反、按位异或^。这些运算符也是对位的操作与逻辑运算符要注意区分。例如:10&20。我们看做:让各位进行相与

01010

& 1 0100

00000

那么10&20的结果就是0。

与或关系我们都知道,在补充一下异或关系,相同为假,不同为真。

1 1 0

1 0 1

0 1 1

0 0 0

我们知道这些都是对位的操作,我们要额外说一下按位取反。例如:int a=1;~a的值为什么呢?我们打印之后发现结果为-2。这涉及到数据存放的知识。我们要知道数据以补码形式存放、补码形式打印。a的二进制,0000 0001,是一个正数,它的补码为它本身0000 0001,这里我们只以一个字节为例。当我们~a后按各位取反,得到1111 1110,当我们打印这个数据时,需要补码打印,这时候它的最高位为1,表示负数,负数的补码为它的反码加一。即:

1000 0001+1 = 1000 0010 对应的十进制为-2。

三目运算符:?:。它是条件语句的内容,C语言中只有这一个三目运算符,即运算对象有三个。例如:a=10,b=20,a>b?a:b的值为b的值。即a大于b为真时a的值是表达式的值,否则b的值是表达式的值。

赋值运算符:=、+=、-=、*=、/=、%=、&=、^=、!=、<<=、>>=。即上面的符号与=相结合。=叫赋值号,使用时要注意,例如:int a=10,表示把数据10赋值给整型变量a。a+=b表示a=a+b,其他符号用法相同。

逗号运算符:“,”。例如:a=(b+c,c+d,d+e);a的值为d+e的值,即最后一个表达式的值。所以逗号表达式的值为最后一个式子的值。但这并不表示前面的式子没用,例如:a=(b++,c+d,b+d);我们要从左向右计算,因为b++改变了b的值,所以要先b++,在b+d。

三、运算符优先级

我们在做简单的符合运算时,比如:a+b/c+d 我们是先让b/c,在让三者进行相加。这里/号比加减运算优先级要高。同理,当我们的式子包含了以上运算符时,我们就要理清先算谁再算谁。这里我们已经将运算符的优先级整理为一句话:优先级从高到低依次为:

() 单目算术 移位 关系 位 逻辑 三目 赋值 逗号

四、运算符结合性

这里讨论的情况是当式子中几个运算符优先级相同时,应该先算谁再算谁。例如:*p++,我们知道*与++都是单目运算符,这时候先算哪个呢?我们也给大家总结了一句话:

单目、三目、赋值运算符结合性自右向左,其他运算符结合性自左向右。

我们给了如下三个例子:

Int a=10,int *p=&a,求*p++。根据结合性自右向左,应该先算p++,即p指向a上面的那块空间。所以*p++表示a上面那块空间的值。

a>b?a>c?a:c:b>c?b:c; 这个式子表示的是求三个数最大值。根据结合性自右向左,先算b>c?b:c求b和c的最大值,在算a>c?a:c求a和c的最大值。最后比较a与b的值。

a=b+c=a+b;这种写法是错误的,因为他的结合性自右向左,且+优先级比=高,所以是先把a+b的值赋值给b+c,我们无法把一个值赋值给表达式,即赋值号左边不能为式子。

五、格式转换规则

1、运算符左右两边类型相同时,得到的结果也是这个类型。例:1/2=0,10/3=3

2、运算符左右两边类型不同时,先把他们往精确度更高的一侧转换,变为相同的类型。 例:1.0/2=0.5,10/3.0=3.333333

3、赋值号右面的数据会自动转换为左面的数据类型。例:int a=2.678。a的值为2

4、我们可以对数据进行强制类型转换。例:float a=2.789,(int)(a);a的类型变为int,值为2

责任编辑:

c语言字符运算 =,C语言运算符相关推荐

  1. sizeof是c语言的一种运算符,C语言位运算和sizeof运算符详解

    位运算和sizeof运算符 C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的.位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果.位运算主要有 ...

  2. c语言位运算符的应用,c语言位运算(c语言位运算符的用法)

    a=1^8 b=32^32 c=7^3 d=4&3 e=4|3 f=1&-1 求值 求详解 求值 为什么等于这么. 一.位运算符C语言提供了六种位运算符:& 按位与 | 按位或 ...

  3. c语言位运算(c语言回文数编程)

    C语言的位运算 <>2;/其实这些符号都是差不多的用法;///PUR0 = PUR0 | 0X20;/,就是相当于R0CONH = R0CONH & 0XFC;/left shif ...

  4. c语言字符合法,C语言字符数据的合法形式

    C语言字符数据的合法形式 C语言有丰富的数据结构和运算符.包含了各种数据结构,如整型.数组类型.指针类型和联合类型等,用来实现各种数据结构的运算.下面,小编为大家搜索整理了C语言字符数据的合法形式,希 ...

  5. c语言 位运算和位运算符

    位运算符 含义 & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 位运算符中除了~,其他均为二元运算符,需要两个操作数: 操作数可以是整型和字符型 ...

  6. c语言算数运算,C语言:算数运算符

    算数运算符顾名思义就是进行运算的符号 + 加法运算符 - 减法运算符或负值运算符 * 乘法运算符 / 除法运算符 % 模运算符或称取余运算符,要求%两侧均为整型数据 算术表达式:用算数运算符降数据连接 ...

  7. c语言 字符相加_C语言中自加自减的编译原理

    自增自减规则 i++ 与 ++i 的主要区别有两个: 1. i++ 返回原来的值,++i 返回加1后的值. 2. i++ 不能作为左值,而++i 可以. 毫无疑问大家都知道第一点(不清楚的看下下面的实 ...

  8. C语言字符5,c语言总览5:字符输入和输出

    c语言的库函数中提供了一些基本的字符输入和输出函数.其实,不管输入或输出的文本来自哪里,都是作为文本流来处理的.一个文本流包含一些字符,它们被换行符分成不同的行.当我们使用这些函数的时候,只需要考虑文 ...

  9. c 语言除法运算,C 语言简单加减乘除运算

    C语言也可以进行加减乘除运算,但是运算符号与数学中的略有不同,见下表. 加法 减法 乘法 除法 求余数 数学 + - × ÷ 无 C语言 + - * / % 加号.减号与数学中的一样,乘号.除号不同, ...

最新文章

  1. Jtabbedpane设置透明、Jpanel设置透明
  2. CactiEz 无法登陆 、重启不画图处理
  3. 在线项目管理软件推荐
  4. screen 常用命令
  5. 首次提出“智能经济形态”,与实体经济深度融合
  6. 工程化,模块化,组件化,规范化
  7. 一个本科生,只用了两年就拿下诺贝尔奖,拯救了无数糖尿病患者
  8. pstate0 vid数值意义_老照片、新感悟:春兰摩托电喷 CB、看一口螺丝的意义
  9. SpringBoot实战总汇--详解
  10. [国家集训队] 矩阵乘法
  11. Python打造一个互动交友聊天室,免费在线聊天
  12. 张博涵清华大学_2009年北大,清华提前录取保送生人数最多的 33所中学
  13. android 人物行走动画,android 3D 游戏实现之人物行走(MD2)
  14. 基于FPGA的EMAC模块和FIFO模块
  15. 自动阅读项目又出新情况?一天秒封47个账号
  16. dlp型3d打印机_DLP3D打印机的工作原理及优势
  17. 鸿雁:我俸你为神明你却偏偏容不下我
  18. Linux常用的基本命令
  19. 华为拿数百亿资金给员工分红,2021年每股可分1.58元
  20. c++ unescape

热门文章

  1. 存储过程或视图的字符串查询
  2. SEO关键之密:自己创造一个关键词!
  3. 基于pygame实现的飞机大战游戏
  4. 用python操作mysql数据库(之批量插入数据)
  5. 日志处理两大生态Splunk和ELK深度对比
  6. windows下安装php性能分析工具XHProf(windows版本)
  7. 用java编写打印时间_编写一个java程序,读取系统时间,然后将时间用中文输出...
  8. 21 个非常有用的 .htaccess 提示和技巧
  9. oracle 兰贝斯_【咨询/顾问150-500人招聘_最新咨询/顾问150-500人招聘信息】-前程无忧...
  10. element ui 获取文件的路径_win10使用WinAppDriver实现UI自动化