[C语言] 02--运算符

1.算数运算符

+            加法运算 , 一目取正            
-            减法运算, 一目取负
*            乘法运算
/            除法运算
%            取模(求余)
++           自加 1     a++    ,  ++a 
--           自减 1     

注意:
①减号也是一个负号 表示取反 , a = -100 , -a -> 100
②取模运算的左右两个操作数必须是整型的
③自加,自减既可以操作整型也可以操作浮点, 也可以操作指针
④前缀 : 先进行自加/自减的运算,然后再参与表达式的运算
⑤后缀: 先参与表达式的运算 , 然后再进行自加/自减的运算

int a = 5 ;
int c = 3 ;

printf("5/3 = %d , 5%%3 = %d \n " ,a/c  , a%c);  
printf("a++:%d\n", a++); // 5 
printf("++a:%d\n", ++a);  // 7 

2.关系运算符

>             大于             a > b   判断a 是否大于b   ,该表达式的值为布尔值
<             小于
>=            大于等于          a >= b  判断a 是否大于或者等于b  , 该表达式的值为布尔值(表达式中只要a 是大于或者等于b 表达式都为真)                                                 
<=            小于等于
==            等于             a == b    判断是否相等
!=           不等于            a != b     判断是否不相等

注意:
①判断两个数是否相等使用的== , 是两个等号 ,而不是一个
②关系运算符的表达式值为布尔值
③在数学中 100< a <200 , 在代码中需要拆开 , a > 100 && a < 200

3.逻辑运算符

 !           逻辑反         !(x>9)   如果 x 确实大于 9 则整个表达式为 假 ,反之为真
 &&           逻辑与         ( a  > 100  &&  a < 200  )  该表达式两边同时为真则为真, 如果其中一个为假则整个表达式为 假
 ||           逻辑或         ( a  > 100  ||  a < 200  )  该表达式中其中一个为真则整个表达式为真

注意:
在逻辑与的运算中,如果左边为假则直接判断为假,右边的表达式将不会执行
在逻辑或的运算中, 如果左边为真则表达式直接判断为真, 右边的表达式将不会执行

int a = 100 ;
int b = 200;


if (a < 50 && (b = b + 300)); // 如果左边为假, 则右边不被执行
printf("a=%d , b=%d\n" , a , b );   // a = 100 ,  b  = 200 

if (a < 50 || (b = b + 300)); //如果左边为真 ,则右边不被执行
printf("a=%d , b=%d\n" , a , b );   // a = 100 ,  b  = 200 

4.位运算符

~ 位逻辑反

int a = 3;
a  ->   0000   0000    0000   0000    0000   0000    0000   0011   

~a ->   1111   1111    1111   1111    1111   1111    1111   1100 

& 位逻辑与 有零得零 --> 清零操作

int a = 3 ;
int b = 5 ;

a:0011
b:0101

a&b :  0001

| 位逻辑或 有一得一 --> 置1 操作

int a = 3 ;
int b = 5 ;

a:0011
b:0101

a|b :  0111

^ 位逻辑异或 相同得0 , 不同得1

int a = 3 ;
int b = 5 ;

a:0011
b:0101

a^b :  0110


int a = 5 ;
int b = 3 ;
int c = a ^ b ; 

printf("c:%d\n" , c );  // 6 
printf("c^a:%d\n" , c^a );  // 3 --> b 
printf("c^b:%d\n" , c^b );  // 5 --> a 

<< 左移

  int a = 3 ;

  a ->   0000   0000    0000   0000    0000   0000    0000   0011   

  a<<4 ->0000   0000    0000   0000    0000   0000    0011   0000 

>> 右移

注意:
①位运算符操作的是操作数的每一个二进制位
②位逻辑反,实际上是对操作数的每一个二进制位进行取反, 0与1之间对调
③异或运算,相同得 0 , 不同得1
④位移, 移出去的丢弃, 空出来的补0
⑤如果移动是一个有符号的数据,并右移运算时 ,移出去丢弃, 空出来补符号位

5.特殊运算符

= 赋值运算符 (左值 = 右值)

① 左值不能是常量 100 = a ;
②不能直接对数组赋值
③可以使用连续赋值 a = b = c = d = 100 ;

int a  , b ;
int x[5] ;
100 = a ;// 错, 左值不能是常量
a = 100 ; // 正确, 对变量a进行赋值
x = 123 ; //  错, 数组不可以这么赋值
a = b = 100 ; // 正确  , 连续赋值, 先把100 赋值给 b , 然后再把 b 赋值给a 

复合运算符

但左右两边右相同的操作数时,可以使用符合运算符, 使得代码看起来更加简明,且可以在一定程度上提高效率。
// 加减乘除

a += b ;// 相当于 a = a + b ;

a -= b ;

a *= b ;

a /= b ;

// 求余

a %= b ; // 相当于 a = a % b ;

// 位运算

a &= b ; // 相当于 a = a & b ;

a |= b ;

a ^= b ;

a >>= b ;

a <<= b ;

条目运算符(三目运算符)

唯一一个需要三个操作数的运算符(表达式)
语法: 表达式1 ? 表达式2 : 表达式3
如果表达式1的值位真, 则整个表达式的值为表达式2 ,冒号左边
如果表达式1的值位假, 则整个表达式的值为表达式3 , 冒号右边

int a = 100 ;
int b = 250 ;
int max = a > b  ?  a : b ;

sizeof 运算符

注意该运算符看起来很像一个函数, 不要忘记它实际只是一个运算符
用来计算指定的 变量 或 变量类型 从而得到他在内从中所需要占用的字节
// 求变量类型

printf ("sizof(long):%ld\n" , sizof(long) ); // 计算long 类型的大小 (得知系统的字长)

// 求变量

int a ; 

printf ("sizof(a):%ld\n" , sizof(a) ); // 计算变量 a 的大小

// 计算数组的大小

int buf [5];

printf ("sizof(buf):%ld\n" , sizof(buf) ); //计算数组 buf 的大小

// 计算结构体大小

struct node
{
    int a ; //4
    char b ; // 1 
    double c ; // 8 
};
printf("sizeof(struct node):%ld\n" ,sizeof(struct node) );// 16

return运算符

含义: 退出某一个函数(如果时在主函数遇到return 则退出程序进程结束, 如果不是主函数,则返回被调用的位置)
语法: 必须出现在函数体内部,可以携带对应类型的值,进行返回

int main(int argc, char const *argv[])
{
    return 0;
}

逗号表达式

语法 : 表达式1 = (表达式2 , 表达式3 ,表达式4 , … , 表达式n );

int a = 10 ;
int c = 250 ;
//       11     261= 11+250  261
int b = (a++ , a = a + c , a , 300 );
printf("b:%d\n" , b );
printf("a:%d\n" , a );

 输出结果:
 b:300
 a:261

注意:
逗号表达式中, 会从左往右依次运算每一一个表达式
整个表达式的值取决于 最后一个表达式的值

6.运算符优先级

man operator
在这里插入图片描述

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值