运算符整理归类学习

思维导图链接boardmix

运算符整理归类学习_第1张图片

1. 算数运算符

+ - * / %(取余 取模)

1)% 取模

注意:取模运算必须对整数进行操作,

int a = 5; int b = 2; int c = a%b; // --> 1

2)/ 除法运算

  1. 除数不能为0
  2. 整型与整型计算结果必然是整型
  3. 浮点类型与整型计算结果是浮点类型
int d = 5/2; //5整型,2整型,整型与整型计算结果必然是整型 
printf("d = %d\n", d); //2 
float f = 5/2; //5整型,2整型,整型与整型计算结果必然是整型2, 将结果强转成浮点类型2.0 
printf("f = %f\n", f); //2.0 
float g = (float)5/2; //5.0/2 -->浮点类型与整形计算,结果是浮点类型 
printf("g = %f\n", g); //2.5

2. 强制类型转换

1)显性强制类型转换

手动指定强转过程:

c = 5%(int)2.5; //2.5强转成int, 直接取整变成2,不是四舍五入

2)隐形数据类型强制转换

  1. 浮点类型与整型计算结果是浮点类型

  1. 整型的有符号数和无符号数计算,结果是无符号数!!

  1. 当字节数少的数据类型强制转换成字节数多的数据类型的时候,补码高位补符号位
char c = -2; -->源码:1000 0010 
             --->反码:1111 1101 
             ---> 补码: 1111 1110 
int a = c;   --> 补码 11111111 11111111 11111111 11111110 
             --> 反码 11111111 11111111 11111111 11111101 
             --> 源码 10000000 00000000 00000000 00000010 ===》 -2 
%d--->源码 ---》-2

3. 赋值运算符

= += -= *= /= %= ...... 将右边的值赋值给左边,简称为 将右值赋给左值, 
int x=100; 
x=5; 
x+=5; 
x=x+5 
x-=5; 
x=x-5; 
x*=5; 
x=x*5; 
特性:从右往左计算,又称之为左结合

注意:左值只能是变量

4. 关系运算符

> < ==(相等) >= <= !=

关系运算符一般与条件判断语句一起使用。作为条件判断真假

注意:

  1. 浮点类型不能使用 == !=号,而要设法转换成>=
  2. 判断两个浮点数是否相等时,判断这两个数是否落在一个区间内,该区间:
    1. 单精度--》正负1e-6 。(1*10-6)
    2. 双精度--》正负1e-15。(1*10-15);

5. 逻辑运算符

&& || !

1)&& 逻辑与

格式: 条件1 && 条件2 当条件1和条件2均为真,则结果为真 当条件1或者条件2有一个为假,则结果为假

注意:当条件1为真,才会执行条件2;

2)|| 逻辑或

格式: 条件1 || 条件2 当条件1或者条件2有一个为真,则结果为真 当条件1和条件2均为为假,则结果为假

注意:当条件1为真是,不执行条件2

3) ! 逻辑非

格式: !条件 若条件为真,则!条件为假 若条件为假,则!条件为真

6. sizeof运算符

功能:计算数据类型或者变量在内存空间中所占的大小,以字节为单位.
格式:
    sizeof(变量名);         --->该变量在内存空间中的大小
    sizeof(数据类型);       --->该数据类型定义的变量在内存空间中的大小;

int a = 10;
sizeof(a);
sizeof(int);
printf("%ld %ld\n", sizeof(int), sizeof(a));      //4  4 

思考,如何判断这个ubuntu是64位还是32位操作系统?

答:sizeof计算long int类型的大小,如果是4就是32位操作系统,如果是8就是64位操作系统

7. 增量/减量运算符

格式: ++ --

int i = 5; ++: 后置++ : i++; 先返回i的值,然后i自增1; 前置++ : ++i; 先i自增1,然后返回i的值;
#include 

int main(int argc, const char *argv[])
{
    int i = 5;
    int a = i++;        //先返回i的值,然后i自增1;
    printf("a=%d i=%d\n", a, i);    //a=5 i=6;

    i = 5;
    int b = ++i;        //先i自增1,然后返回i的值;
    printf("b=%d i=%d\n", b, i);    //b=6 i=6;

    i = 5;
    printf("i=%d\n", i++);      //5
    printf("i=%d\n", i);        //6
                                                                      
    i=5;
    printf("i=%d %d\n", i, i++);    //6 5 ,因为printf是从右往左计算的
    //不要将带有赋值属性的运算放在printf函数中,否则结果可能很难理解

    return 0;
}

8. 条件运算符

? : 格式: 条件语句?返回值a:返回值b; 如果条件语句为真,则返回a; 如果条件语句为假,则返回b;

9. 位(bit)运算符

& | ^ ~ << >>

1) & 按位与

格式 :  a & b
        同为1,结果为1;
        有一个位0,结果为0;
3 & 9:  3 = 0000 0011
        9 = 0000 1001
        ---------------
            0000 0001 = 1;

2)| 按位或

格式 :  a | b
        同为0,结果为0;
        有一个为1,结果为1;
3 | 9:  3 = 0000 0011
        9 = 0000 1001
        ---------------
            0000 1011 = 11;

3)~ 按位取反

格式: ~a 3 = 0000 0011 ~3 = 1111 1100

4)^ 按位异或

格式: a^b 相同为0,不同为1; 3^9 = 0000 0011 0000 1001 ---------- 0000 1010

5)<<左移

格式:
    x << 指定位数     低位补0,高位溢出
unsigned char c = 3;
    c = c<<1  ==> c<<=1
    c=3 ==>  0000 0011<<1 ==> 0000 0110==6
             0000 0110<<1 ==> 0000 1100==12
             0000 1100<<1 ==> 0001 1000==24
             0001 1000<<3 ==> 1100 0000==24*2*2*2=192
             -------------------------------------
             在高位没有溢出的情况下,左移一位相当于是*2.
             1100 0000<<1 ==> 1000 0000==128

6)>> 右移

格式:
    x >> 指定位数    
若x是有符号数,则补码高位补符号位。

unsigned char c = 192;
    c = c>>1  ==> c>>=1
    c=192 ==> 1100 0000>>1 ==> 0110 0000==96
              0110 0000>>1 ==> 0011 0000==48
              0011 0000>>3 ==> 0000 0110==6  48/2/2/2
              0000 0110>>1 ==> 0000 0011==3
              0000 0011>>1 ==> 0000 0001==1               
             -------------------------------------
             在低位没有溢出的情况下,右移一位相当于是/2.
有符号的数据,右移的时候,补码高位补符号位!!!             
char c = -64 ==> 1100 0000源码
                 1011 1111反码
                 1100 0000补码
                 1100 0000>>1 ==>高位补符号位==>1110 0000  补码  -->1101 1111  反码--> 1010 0000   源码 == -32
                 1110 0000>>1 ==> 1111 0000补码 --> 1110 1111反码 --> 1001 0000源码 = -16

7)总结

清0,用&

置1,用|

部分取反,用^

全部取反,用~

左移一位,相当于乘以2

右移一位,相当于除以2

10. 逗号运算符

(式子1, 式子2)

  1. 逗号运算符会将多个表达式连接在一起,用小括号将整个表达式包含起来;
  2. 运算顺序:从左往右
  3. 返回的是最后一个表达式的值,但是前面的表达式也会运行。

10. 运算符优先级

括号优先级最高:() []

赋值运算符优先级倒数第2:= += -= *= /=

逗号优先级最低:,

哪部分要先计算,就用括号括起来

你可能感兴趣的:(c#)