c语言四 运算符
1.运算符
基本运算符
-
=
- 数据对象:泛指数据在内存的存储区域
- 左值:表示可以被更改的数据对象
- 右值:能赋给左值的量
-
+:加
-
-:减
-
*:乘
-
/:除
-
%:取余数
-
+=:加等于
-
-=:减等于
-
*=:乘等于
-
/=:除等于
-
%=:取余等于
-
++:自加1
- i++先计算表达式的值,然后在++(加一)
- ++i是先++(加一),在计算表达式的值
-
--:自减1
-
逗号运算符
int a=2;
int b=3;
int c=4;
int d=5;
int i=(a=b,c+b);
//逗号表达式先求逗号左边的值,然后求右边的值,整个语句的值是逗号右边的值
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
!= | 不相等 | 4!=3 | 1 |
< | 小于 | 4<3 | 0 |
> | 大于 | 4>3 | 1 |
<= | 小于等于 | 4<=3 | 0 |
>= | 大于等于 | 4>=3 | 1 |
== | 等于 | 4==3 | 0 |
! | 非 | !a | 若a为假,则!a为真. 若a真,则!a为假 |
&& | 与 | a&&b | 若a和b皆为真,否则为假 |
|| | 或 | a||b | 若a和b皆为假,否则为真 |
& | 按位与 | 0&&0 0&&1 1&&1 1&&0 | 0 0 1 0 |
| | 按位或 | 0||0 0||1 1||1 1||0 | 0 1 1 1 |
~ | 取反 | ~0 ~1 | 1 0 |
^ | 按位异或 | 0^0 0^1 1^1 1^0 | 0 1 0 1 同为0,异为1 |
<< | 左移 | 00003210<<2 | 00321000 |
>> | 右移 | 00003210>>2 | 00000321 |
2.运算符优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ++(后缀),--(后缀),()(调用函数),{}(语句块),.,-> | 从左到右 |
2 | ++(前缀),--(前缀),+(前缀),-(前缀),!(前缀),~(前缀),sizeof,*(取指针值),&(取地址),(type)(类型转化) | 从右到左 |
3 | *, /, % | 从左到右 |
4 | +,- | 从左到右 |
5 | << >> | 从左到右 |
6 | < > <= >= | 从左到右 |
7 | == != | 从左到右 |
8 | & | 从左到右 |
9 | ^ | 从左到右 |
10 | | | 从左到右 |
11 | && | 从左到右 |
12 | || | 从左到右 |
13 | ? | 从右到左 |
14 | =,*=,%=,+=,-=,<<=,>>=,&=,|=,^= | 从右到左 |
15 | ,(逗号运算符) | 从左到右 |
3.复合语句
{}代码块
4.空语句
只有一个;号的语句就是空语句,空语句在C语言里面和合法的,并且是在某些场合必用的
5.类型转换
数据存储空间大小可能会受到影响
-
隐式转换
系统自动将取值范围小的数据类型转换为数据取值范围大的数据类型,它 是由系统自动转换完成的。
//例如,将 int 类型和 double 类型的数据相加,系统会将 int 类型的数据转换为 double 类型的数据,再进行相加操作 int num1=1; double num2=1.1; num1+num2; /* 在上述示例代码中,由于 double 类型的取值范围大于 int 类型,因此,将 int 类型的 num1 与 double类型的 num2 相加时,系统会自动将 num1 的数据类型由 int 转换为 double 类型,从而保证数据的精度不会丢失 */
-
强制转换
指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型 。
int x; double y; (double)x+y; //表达将x的值转换成double类型后,再与y相加 (int)(x+y); //表达将x+y的值转换为int类型
(1).浮点型与整型
将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分,只保留整数部分。将整型值赋给浮点 型变量,数值不变,只将形式改为浮点形式,即小数点后带若干个 0。需要注意的是,赋值时的类型转换 实际上是强制的。
(2.)单,双精度浮点型
由于 C 语言中的浮点值总是用双精度表示的,所以 float 型数据参与运算时只需要在尾部加 0 延长为 double 型数据。double 型数据转换为 float 型时,会造成数据精度丢失,有效位以外的数据将会进行四舍五 入。
(3).char型与int型
char 型与 int 型 将 int 型数值赋给 char 型变量时,只保留其最低 8 位,高位部分舍弃。
将 char 型数值赋给 int 型变量时, 一些编译程序不管其值大小都作正数处理,而另一些编译程序在转 换时会根据 char 型数据值的大小进行判断,若值大于 127,就作为负数处理。对于使用者来讲,如果原来 char 型数据取正值,转换后仍为正值。如果原来 char 型值可正可负,则转换后也仍然保持原值,只是数据 的内部表示形式有所不同。
(4).int型与long型
int 型与 long 型 long 型数据赋给 int 型变量时,将低 16 位值送给 int 型变量,而将高 16 位截断舍弃。(这里假定 int 型占两个字节)。 将 int 型数据送给 long 型变量时,其外部值保持不变,而内部形式有所改变。
(5).无符号整数
将一个 unsigned 型数据赋给一个长度相同的整型变量时(如:unsigned→int、unsigned long→long, unsigned short→short) ,内部的存储方式不变,但外部值却可能改变。
将一个非 unsigned 整型数据赋给一个长度相同的 unsigned 型变量时, 内部存储形式不变,但外部表 示时总是无符号的。
1.运算符
基本运算符
-
=
- 数据对象:泛指数据在内存的存储区域
- 左值:表示可以被更改的数据对象
- 右值:能赋给左值的量
-
+:加
-
-:减
-
*:乘
-
/:除
-
%:取余数
-
+=:加等于
-
-=:减等于
-
*=:乘等于
-
/=:除等于
-
%=:取余等于
-
++:自加1
- i++先计算表达式的值,然后在++(加一)
- ++i是先++(加一),在计算表达式的值
-
--:自减1
-
逗号运算符
int a=2;
int b=3;
int c=4;
int d=5;
int i=(a=b,c+b);
//逗号表达式先求逗号左边的值,然后求右边的值,整个语句的值是逗号右边的值
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
!= | 不相等 | 4!=3 | 1 |
< | 小于 | 4<3 | 0 |
> | 大于 | 4>3 | 1 |
<= | 小于等于 | 4<=3 | 0 |
>= | 大于等于 | 4>=3 | 1 |
== | 等于 | 4==3 | 0 |
! | 非 | !a | 若a为假,则!a为真. 若a真,则!a为假 |
&& | 与 | a&&b | 若a和b皆为真,否则为假 |
|| | 或 | a||b | 若a和b皆为假,否则为真 |
& | 按位与 | 0&&0 0&&1 1&&1 1&&0 | 0 0 1 0 |
| | 按位或 | 0||0 0||1 1||1 1||0 | 0 1 1 1 |
~ | 取反 | ~0 ~1 | 1 0 |
^ | 按位异或 | 0^0 0^1 1^1 1^0 | 0 1 0 1 同为0,异为1 |
<< | 左移 | 00003210<<2 | 00321000 |
>> | 右移 | 00003210>>2 | 00000321 |
2.运算符优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ++(后缀),--(后缀),()(调用函数),{}(语句块),.,-> | 从左到右 |
2 | ++(前缀),--(前缀),+(前缀),-(前缀),!(前缀),~(前缀),sizeof,*(取指针值),&(取地址),(type)(类型转化) | 从右到左 |
3 | *, /, % | 从左到右 |
4 | +,- | 从左到右 |
5 | << >> | 从左到右 |
6 | < > <= >= | 从左到右 |
7 | == != | 从左到右 |
8 | & | 从左到右 |
9 | ^ | 从左到右 |
10 | | | 从左到右 |
11 | && | 从左到右 |
12 | || | 从左到右 |
13 | ? | 从右到左 |
14 | =,*=,%=,+=,-=,<<=,>>=,&=,|=,^= | 从右到左 |
15 | ,(逗号运算符) | 从左到右 |
3.复合语句
{}代码块
4.空语句
只有一个;号的语句就是空语句,空语句在C语言里面和合法的,并且是在某些场合必用的
5.类型转换
数据存储空间大小可能会受到影响
-
隐式转换
系统自动将取值范围小的数据类型转换为数据取值范围大的数据类型,它 是由系统自动转换完成的。
//例如,将 int 类型和 double 类型的数据相加,系统会将 int 类型的数据转换为 double 类型的数据,再进行相加操作 int num1=1; double num2=1.1; num1+num2; /* 在上述示例代码中,由于 double 类型的取值范围大于 int 类型,因此,将 int 类型的 num1 与 double类型的 num2 相加时,系统会自动将 num1 的数据类型由 int 转换为 double 类型,从而保证数据的精度不会丢失 */
-
强制转换
指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型 。
int x; double y; (double)x+y; //表达将x的值转换成double类型后,再与y相加 (int)(x+y); //表达将x+y的值转换为int类型
(1).浮点型与整型
将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分,只保留整数部分。将整型值赋给浮点 型变量,数值不变,只将形式改为浮点形式,即小数点后带若干个 0。需要注意的是,赋值时的类型转换 实际上是强制的。
(2.)单,双精度浮点型
由于 C 语言中的浮点值总是用双精度表示的,所以 float 型数据参与运算时只需要在尾部加 0 延长为 double 型数据。double 型数据转换为 float 型时,会造成数据精度丢失,有效位以外的数据将会进行四舍五 入。
(3).char型与int型
char 型与 int 型 将 int 型数值赋给 char 型变量时,只保留其最低 8 位,高位部分舍弃。
将 char 型数值赋给 int 型变量时, 一些编译程序不管其值大小都作正数处理,而另一些编译程序在转 换时会根据 char 型数据值的大小进行判断,若值大于 127,就作为负数处理。对于使用者来讲,如果原来 char 型数据取正值,转换后仍为正值。如果原来 char 型值可正可负,则转换后也仍然保持原值,只是数据 的内部表示形式有所不同。
(4).int型与long型
int 型与 long 型 long 型数据赋给 int 型变量时,将低 16 位值送给 int 型变量,而将高 16 位截断舍弃。(这里假定 int 型占两个字节)。 将 int 型数据送给 long 型变量时,其外部值保持不变,而内部形式有所改变。
(5).无符号整数
将一个 unsigned 型数据赋给一个长度相同的整型变量时(如:unsigned→int、unsigned long→long, unsigned short→short) ,内部的存储方式不变,但外部值却可能改变。
将一个非 unsigned 整型数据赋给一个长度相同的 unsigned 型变量时, 内部存储形式不变,但外部表 示时总是无符号的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!