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

来源:互联网 发布:淘宝交易风险保障 编辑:程序博客网 时间:2024/06/10 06:21

对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<<n ->9 * 2n次方


5.右移 >>

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

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

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

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


0 0
原创粉丝点击