黑马程序员-对C语言各种运算符的总结

对C语言各种运算符的总结

运算符的优先级(从高到低)

优先级

描述

运算符

1

括号

()、[]

2

正负号

+、-

3

自增自减,非

++、--、!

4

乘除,取余

*、/、%

5

加减

+、-

6

移位运算

<<、>>、>>>

7

大小关系

>、>=、<、<=

8

相等关系

==、!=

9

按位与

&

10

按位异或

^

11

按位或

|

12

逻辑与

&&

13

逻辑或

||

14

条件运算

?:

15

赋值运算

=、+=、-=、*=、/=、%=

16

位赋值运算

&=、|=、<<=、>>=、>>>=


这个是前面漏发的,开始是觉得这一章没什么用,没什么营养没必要发。但是后来有一次做这个的题目4题错了2题,顿时发现 任何一个小的知识没弄明白 都可能导致大局出错,而且运算本身就是往后经常用到的知识,是不可或缺额。所以我老老实实的总结了这一章节的全部知识点。


. 算数运算符

基本使用:

int a = 10 + 1 + 2 - 3 + 5;

int b = -10

int c = 10 * b;

int d = 10 / 2;


// 取余运算(模运算)

// %两边都是整数

// %取余结果的正负性只跟%左边的数值有关

int e = 10 % -3;

printf("%d\n", e);


 // *自动类型转换(double->int)

 int a = 10.8;

 

 // *强制类型转换(double->int

 int b = (int) 10.5;

 printf("%d\n", a);

 

 // *自动类型提升(int->double)

 double c = 10.6 + 6;

 double d = 1 / 3;

 double e = (double)3/2;

      printf("e的值是%f\n", e);

// *复合赋值运算符

a += 5; // a = a + 5;

a *= 5; // a = a * 5;

a += 5 + 6 + 4; // a = a + (5 + 6 + 4);

// *自增自减 a++是下一行再加 ++a是马上加

int b;

int a = 10;

// b = 10 + 12;

//b = (a++) + (++a);

// b = 11 + 11;

b = (++a) + (a++);

// a -> 11


.关系型运算

// 条件成立就返回1,真

// 条件不成立就返回0,假

int a = 10;

int b = 11;

int result = b >= a;


// *复杂关系型运算

int a =  5 != 4 + 2 * 7 > 3 == 10;

printf("%d\n", a); // 答案是0


.逻辑运算符

1.逻辑与 条件1 && 条件2

1

int a  =  10>3 && 7<6;

int a = 0 && 10;

printf("a=%d\n", a); // 答案是0


2

 int a = 10;

 int b = 10;

 int c = (a<5) && (++b>=11);

// 这题有陷阱如果a<5 不符合后 后面的就直接不算了。

 printf("a=%d, b=%d, c=%d\n", a, b, c); // 答案是10100



2.逻辑或 条件1 || 条件2


1

 int a = 10;

 int b = 10;

  int c = (a<5) || (b++ - 10);

 printf("a=%d, b=%d, c=%d\n", a, b, c); // 答案是10110


3.逻辑非 !条件

// 如果条件成立,就返回0;如果条件不成立,就返回1


1

int a = !10>8;

printf("a=%d\n", a); // 答案是0


2

int a = !!10;

printf("a=%d\n", a); // 答案是1


.三目运算符

条件 ? 数值1 : 数值2

1

int a = !100 ? 9 : 89

printf("a=%d\n", a); // 答案是89


2  计算3个整数之间的最大值

int a = 10;

int b = 999999;

int c = 1000;


// 求出ab的最大值

int abMax = (a > b) ? a : b;

// 求出最终的最大值

int d = (abMax > c) ? abMax : c;

 //int d = (((a > b) ? a : b) > c) ? ((a > b) ? a : b) : c;

printf("d is %d\n", d); // 答案是999999

return 0;


.位运算符

1. 按位与 &

// 都是1才能是1 否则是0

10111011

10101101

---------

10101001


1001

0101

-----

0001


2.按位或 |

// 有一个是1就能是

1001

0101

-----

1101


3.按位异或 ^

// 不一样就是1 ,一样就是0

*相同数值进行异或,结果肯定是0,比如9^9

*交换 9^5^6 == 9^6^5

*任何数值跟0进行异或,结果还是原来的数值,9^0 == 9

*a^b^a == a^a^b == 0^b == b


1001

0101

-----

1100


0101

0000

----

0101


4.左移 <<

// 左移几位就是乘2的几次方

9<<1 -> 9 * 21次方 == 18

9<<2 -> 9 * 22次方 ==36

9< 9 * 2n次方


5.右移 >>

// 右移几位就是除2的几次方

8>>1 -> 8/2 == 4

8>>2 -> 8/22次方 == 2

8>>n -> 8/2n次方


你可能感兴趣的:(黑马程序员-对C语言各种运算符的总结)