1、算术运算符 (双目运算符) :
+ 加法运算符 1+2 ( +1 +2 单目表示正负)
- 减法运算符 1-2 3-1 (-3 -4 单目表示正负 )
* 乘法运算符
/ 除法运算符 如果结果是一个整型那么小数部分将会被抛弃
% 求余(取摸)
单目:
++ 自加1
-- 自减1
//实例:
#include <stdio.h>
int main()
{
printf("%d\n" , a ++ ); // 3 --》 4 // 由于++ 符号在操作数的右边,因此先取值,然后再自加
printf("%d\n" , a ); // 4 由于上一条代码已经 把a 从 3 自加到 4 因此输出4
printf("%d\n" , ++a ); // 5 由于 ++ 在a 的左边, 因此先自加然后再取值
//拓展研究一下原理:
// 小坑 与编译器的编译原理有关,不同的编译器所得的值可能会不同
a = 5 ;
printf("%d , %d , %d , %d \n" , a++ , ++a , a-- , --a );
return 0;
}
1
提醒:
2
拓展一下关键字
volatile
注意:
求余运算符左右两边不允许出现浮点数, 只能是整型。
自加自减符号的使用要注意是
前缀
还是
后缀
如果是前缀则需要先自加或自减然后取值
如果是后缀则先取值, 然后在自加或自减
2、关系运算符 (双目运算符):
> 大于
< 小于
>= 大于或等于
<= 小于或等于
== 等于
--》 恒等于
( = 一个等号称为赋值符号)
!= 不等于
注意:
判断两个数据或者两个表达式是否相等使用
== 两个等号
关系运算符所组成的表达式的值为
布尔值
4 > 5 --》 false
如果要表示有数的取值范围:
数学: 10 < a < 100
代码: a > 10 && a < 100
3、逻辑运算符:
&& 逻辑与 如果需要判断
两个或多个条件
并要求
同时成立
则可使用该逻辑运算符
|| 逻辑或 如果判断
两个或多个条件
中只要
有一个成立即可
,可以使用逻辑或
! 逻辑反 把逻辑的真假进行对调(真变假 , 假变真)
注意:
在使用反逻辑与&& 的表达式中如果
从左往右第一个条件不成立
,则后面的所有条件将不会判
断(不会运行)直接跳过。
#include <stdio.h>
int main()
{
a = 100 , b = 250 ;
if ( ++a && a < 100 && ++b && --a );
//以上表达式中第一个条件 ++a 是成立的, 但是第二个条件不成立,导致后面的所有表达式无法运行
//因此最终输出a = 101, b= 250
return 0;
}
在使用逻辑或的表达式中,如果
从左往右第一个表达式为真
,那么后面的表达式都
不会被执行
。
a = 100 , b = 250 ;
if ( a < 100 || ++b || --a );
//以上表达式中,表达式1 为假 , 因此会继续往后面判断,
//第二个表达式为真 , 因此将停止后面所有表达式的判断(不执行)
//输出结果 a = 100 , b = 251位运算符:
概念:
使用位运算进行操作的两个操作数实际上操作的是他们的二进制位。
~ 按位取反(单目)
#include <stdio.h>
int main()
{
int a = 3 ; //2 a->> 0000 0000 0000 0000 0000 0000 0000 0011
~a; //->>1111 1111 1111 1111 1111 1111 1111 1100
printf("a:%d,%x\n" , a,a); //
printf("~a:%d,%x\n",~a,~a); //结果为-4,~a的符号位不变,取补码=反码加1
return 0;
}
& 按位与 (有0 得 0 ) 用来清零操作(双目)
int a = 3 ;//a->> 0000 0000 0000 0000 0000 0000 0000 0011
int b = 5 ;// b->> 0000 0000 0000 0000 0000 0000 0000 0101
a&b; //->0000 0000 0000 0000 0000 0000 0000 0001
printf("a&b:%d\n" , a&b ); // 1
| 按位 或 (有1 得 1 ) 用来至 1 操作(双目)
int a = 3 ;
int b = 5 ;
//a->> 0000 0000 0000 0000 0000 0000 0000 0011
//b->> 0000 0000 0000 0000 0000 0000 0000 0101
a|b->0000 0000 0000 0000 0000 0000 0000 0111
printf("a|b:%d\n" , a|b ); // 7
^ 按位异或 (相反为1 )
int a = 3 ;
int b = 5 ;
//a->> 0000 0000 0000 0000 0000 0000 0000 0011
//b->> 0000 0000 0000 0000 0000 0000 0000 0101
a^b;// 0000 0000 0000 0000 0000 0000 0000 0110
printf("a^b:%d\n" , a^b ); // 6
⊙
按位同或 (相同为1,)
练习:
尝试使用异或运算符来交换两个数据的值(不借助第三个参数)
<< 按位左移
最快也最方便的交换方法!!!!!!!!!
#include <stdio.h>
int main()
{
int a=3,b=5;
printf("a=%d,b=%d\n",a,b);
a=a^b;
b=a^b;
a=a^b;
printf("a=%d,b=%d\n",a,b);
return 0;
}
结果:
原理:
注意:
在左移的操作中,符号位没有参与移动(符号位不变)
<< 按位左移
>> 按位右移
在右移的操作中,符号位没有参与移动(
符号位不变
)
练习:
假设有个一个数据a = 4080 ,要求使用位操作完成一下功能:
把数据的第
8
位以及第
4
位设置为
0,
称为清零
把数据的第
20
位以及
23
位设置为
1,
称为置1
注意:位数是从0开始,不是从1开始!!!
实例:
法一:
#include <stdio.h>
int main()
{
int a = 4080 ; // 0000 0000 0000 1111 1111 0000
// 把数据的第8位以及第4位设置为 0
int b = 0x11 ; //0x11=0001 0001;
a = a ^ ( b << 4) ;
printf("a : %d\n" , a );
// 把数据的第 20 位以及 23 位设置为 1
int c = 0x09 ;//0x09= 1001
a = a | (c << 20 ) ;
printf("a : %d\n" , a );
return 0;
法二:(工作常用)
位置零:a&=~(1<<i)
位置1:a|=1<<i;
#include <stdio.h>
int main()
{
int a=4080;
a|=(1<<20)|(1<<23);
a&=~((1<<4)|(1<<8));
printf("%d",a);
return 0;
}
特殊运算符:
赋值符号 = :(左值 = 右值)
左值不可以上常量或者表达式
不可以直接对数组名字进行赋值
可以使用连续赋值
a = b = c = d = e = 100
a =
b+n
= c = d = e = 100 [ b+n
作为
c
的左值 错误
]
复合运算符:
复合运算符只有10个,超出以下10个的部分都是非法的。他的作用增强程序的可读性,一定程
度地提高代码的运行效率。
+= *= /= %= -= 算数类
&= |= ^= >>= <<= 位操作类
&= |= ^= >>= <<= 位操作类
sizeof 运算符:(大规模程序上常用)
该运算符用来计算某一个
变量
或者
类型
的大小
该运算符看起来像一函数, 但是实际是一运算符
该运算符的结果是一个
long
类型的, 因此在不同的系统下他的大小有差异(32位系统为4个字节,64位系统为8个字节)
1
sizeof
(
long
) ;
该表达式得出
long
类型的大小
2
sizeof
(
num
) ;
该表达式得出 变量
NUM
的大小
3
sizeof
运算符在计算某个变量的大小时候可以省略括号,
4
但是在计算某个类型时不允许省略括号
5
一般情况下我们都不会去省略他的括号
6
return 运算符:(大规模程序上常用)
作用:
返回、结束当前函数, 并携带一个数据退出。
一般情况下返回的
值的类型
应该与函数头中的返回值类型保持一致 。
注意:
该运算符在程序遇到的时候会终止
当前函数
的运行并退出。如果是
主函数
中遇到该运算符
则会直接
退出程序结束
。
三目运算符:(条件运算符)(大规模程序上常用)重要!!!!!!
(唯一一个拥有三个操作数的运算符)
语法:
1
表达式
1
?
表达式
2
:
表达式
3
;
解读:
如果表达式1 的值为真则取表达式2的值为最终值
如果表达式1 的值为假则取表达式3的值为最终值
实例:
#include <stdio.h>
int main()
{
int a=5,b=6;
//如果a>b,则max=a,否则max=b;
int max=a>b?a:b;
printf("%d\n",max);
return 0;
}
运算符的优先级:
1
man operator
逗号表达式:(不建议这种写法,可阅读性很差)
概念:在一个表达式中用逗号分割出来多个表达式, 而该表达式最终的值为值
最后的表达式的
值
(表达式的运算
从左往右依次运算
)。
#include <stdio.h>
int main()
{
int a = 10 ;
int b = 20 ;
int c = ( a++ , b++ , a+b ); // 表达式中 a 与b 都会分别自加然后该表达式的最终在为 32
printf("a:%d\n" , a );
printf("b:%d\n" , b );
printf("c:%d\n" , c );
return 0;
}
好了,以上就是我对运算符·的基本了解,希望能对大家有所帮助!!!!