操作符详解(1)(下)

简介: 操作符详解(1)(下)

4、位操作符


1. &   按位与
2. |   按位或
3. ^   按位异或

注意:他们的操作数必须是整数

不懂?没关系,请看下面带码

1. int a = 3;
2. //00000000000000000000000000000011 - 补码
3.  int b = -5;
4. //10000000000000000000000000000101 -原码
5. //11111111111111111111111111111010 -反码
6. //11111111111111111111111111111011 - 补码

这是我们给出的初始代码后面都会用到,这里不得不在强调一遍:整数在内存中存储的是补码,计算的时候也是使用补码计算的

& 操作符使用与计算如下

1. int c = a & b;
2. // //& -- 对应二进制位有0则为0,两个同时为1,才是1
3. // //00000000000000000000000000000011
4. // //11111111111111111111111111111011
5. // //00000000000000000000000000000011 - 补码
6. // //
7. // printf("%d\n", c);//结果为3

| 操作符使用与计算如下

1. // int c = a | b;
2. // //| - 按(2进制)位或 - 对应的二进制位有1则为1,两个同时为0才是0
3. // //00000000000000000000000000000011
4. // //11111111111111111111111111111011
5. // //11111111111111111111111111111011 - 补码
6. // //11111111111111111111111111111010
7. // //10000000000000000000000000000101 - -5
8. // printf("%d\n", c);//结果为-5

^ 操作符使用与计算如下

1. int c = a ^ b;
2. // //^ - 按二进制位异或 -对应的二进制位相同为0,相异为1
3. // //00000000000000000000000000000011
4. // //11111111111111111111111111111011
5. // //11111111111111111111111111111000 - 补码
6. // //11111111111111111111111111110111
7. // //10000000000000000000000000001000 - -8
8. // printf("%d\n", c);//结果为-3


5、赋值操作符


1. +=   -=   *=   /=   %=
2. >>=  <<=  &=   |=   ^=
3. =

赋值操作符就比较简单,就给大家举一个例子,其他的赋值操作符都是同样的道理

1. a+=b
2. 意思为a=a+b;

 

6、单目操作符


1. !           逻辑反操作
2. -           负值
3. +           正值
4. &           取地址
5. sizeof      操作数的类型长度(以字节为单位)
6. ~           对一个数的二进制按位取反
7. --          前置、后置--
8. ++          前置、后置++
9. *           间接访问操作符(解引用操作符)
10. (类型)       强制类型转换

       6.1、单目操作符介绍

1. !           逻辑反操作
2. 
3. int main()
4. {
5.  int flag = 5;
6.  if (flag == 0)
7.  {
8.    printf("hehe\n");
9.  }
10.   if (!flag)//flag 为假 打印hehe
11.   {
12.     printf("hehe\n");
13.   }
14.   if (flag)
15.   {
16.     printf("haha\n");
17.   }
18.   return 0;
19. }
20. 简单的应用
21. //int main()
22. //{
23. //  int a = 0;
24. //  //scanf 读取失败返回的是EOF
25. //  while (scanf("%d", &a) != EOF)
26. //  {
27. //    printf("%d\n", a);
28. //  }
29. //  return 0;
30. //}

+ 与  -这里博主就不介绍了

1. //&  * 应用于指针
2. 
3. //int main()
4. //{
5. // int a = 10;
6. // //pa是指针变量
7. // int* pa = &a;//&-取地址操作符-取出a的地址
8. // *pa = 20;//解引用操作符(间接访问操作符)-单目操作符-通用pa中存放的地址,找到指向的空间(内容)
9. // int c = *pa;
10. //  return 0;
11. //}

~ 操作符讲解和使用如下

1. //~ 按补码二进制位取反
2. //
3. //int main()
4. //{
5. // int a = 0;
6. // printf("%d\n", ~a);//这里的值为-1
7. // //00000000000000000000000000000000
8. // //11111111111111111111111111111111 - 补码
9. // //11111111111111111111111111111110
10. //  //10000000000000000000000000000001 -1
11. //  return 0;
12. //}

++、--操作符详解如下

1. //--前置、后置--
2. //++前置、后置++
3. 
4. //int main()
5. //{
6. // int a = 1;
7. // int b = a++;//后置++,先使用,后++
8. // //b=a,a=a+1
9. // printf("a=%d b=%d\n", a, b);//2 1
10. //  return 0;
11. //}
12. 
13. //
14. //int main()
15. //{
16. //  int a = 1;
17. //  int b = a--;//后置--,先使用,后--
18. //  //b=a,a=a-1
19. //  printf("a=%d b=%d\n", a, b);//0 1
20. //  return 0;
21. //}
22. //
23. 
24. //int main()
25. //{
26. //  int a = 1;
27. //  int b = ++a;//前置++,先++,后使用
28. //  //a=a+1,b=a
29. //  printf("a=%d b=%d\n", a, b);//2 2
30. //  return 0;
31. //}
32. 
33. 
34. //int main()
35. //{
36. //  int a = 1;
37. //  int b = --a;//前置--,先--,后使用
38. //  //a=a-1,b=a
39. //  printf("a=%d b=%d\n", a, b);//0 0
40. //  return 0;
41. //}
42. 
43. 
44. //int main()
45. //{
46. //  int a = 10;
47. //  printf("%d\n", a++);//10
48. //  printf("%d\n", a);//11
49. //
50. //  return 0;
51. //}

(类型) 强制类型转换使用如下

1. //int main()
2. //{
3. // int a = (int)3.14;//强制转换,将浮点型转为整形
4. // printf("%d\n", a);//结果为3
5. // return 0;
6. //}

 

       6.2、sizeof和数组  


  这里我们需要强调的是

我们看一下实例应用就懂了


1. //#include <stdio.h>
2. //void test1(int arr[])//int*
3. //{
4. // printf("%d\n", sizeof(arr));//(2)
5. //}
6. //void test2(char ch[])//char*
7. //{
8. // printf("%d\n", sizeof(ch));//(4)
9. //}
10. //int main()
11. //{
12. //  int arr[10] = { 0 };
13. //  char ch[10] = { 0 };
14. //  printf("%d\n", sizeof(arr));//打印的是40,因为每个数4个字节,总共有10个数,所以数组大小为40
15. //  printf("%d\n", sizeof(ch));//对char操作时计算的时数组内可存放多少个字符,所以是10
16. //  test1(arr);//打印的是&arr[0],&arr[0]是指针变量,字节大小为4/8个字节
17. //具体为多少,这得取决你所使用的平台环境,x86为4,x64为8
18. //播主用的是x86,所以此处打印为4
19. //  test2(ch);// 打印的是&ch[0],同理,所以长度为4字节
20. //  return 0;
21. //}

 

7、关系操作符


1. >
2. >=
3. <
4. <=
5. !=
6. ==

这里博主也不做多余解释,但值得注意的是:在编程的过程中== 和=不小心写错,易导致错误;只能运用到合适的位置上 ,注意>=、<=、!=别写反了


8、逻辑操作符


1. &&    逻辑与 
2. ||    逻辑或

这里了博主借助于一位大牛的图来带大家了解一下这两个操作符

首先看一下逻辑与&&,也就是并且的意思,看下图

我们再来看看逻辑或||,也就是或者的意思,看下图

了解这些之后,我们先浅看一个代码看一下他们的应用


1. //int main()
2. //{
3. // int y = 0;
4. // scanf("%d", &y);
5. // //1. 能被4整除,并且不能被100整除
6. // //2. 能被400整除是闰年
7. // if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
8. // {
9. //   printf("闰年\n");
10. //  }
11. //  else
12. //  {
13. //    printf("不是闰年\n");
14. //  }
15. //  return 0;
16. //}


了解呢这些之后呢,它们还有几个点也必须值得我们注意

&&  操作符,左边为假,右边就不会计算了

| |   操作符,左边为真,右边就不会计算了

至于具体什么意思呢,请看代码


1. //#include <stdio.h>
2. //int main()
3. //{
4. // int i = 0, a = 0, b = 2, c = 3, d = 4;
5. // i = a++||++b||d++;
6. // printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);//
7. // return 0;


由于a++,是先使用后++,所以判断时此处还为0,为假继续判断;++b=3为真,后面便不用计算了,所d++不执行,便得出以下结果



刚刚时| |操作符,接下来我们看看&&操作符,代码如下


1. //#include <stdio.h>
2. //int main()
3. //{
4. // int i = 0, a = 0, b = 2, c = 3, d = 4;
5. // i = a++ && ++b && d++;
6. // printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);//
7. // return 0;


由于a++,是先使用后++,所以判断时此处还为0,为假结束后面计算,所一结果如下


 

关于其他操作符的详解请关注博主后续文章

 

相关文章
|
6天前
|
C语言
条件操作符和逻辑操作符(C语言零基础教程)
条件操作符和逻辑操作符(C语言零基础教程)
|
6天前
|
JavaScript 前端开发 Java
运算符分为哪几类? 哪些运算符常用作判断?简述运算符的优先级?
运算符分为哪几类? 哪些运算符常用作判断?简述运算符的优先级?
|
6天前
|
编译器 C++ 索引
C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)
C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)
|
6天前
|
存储 C语言
C learning_12 操作符前篇(算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符)
C learning_12 操作符前篇(算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符)
|
10月前
|
C语言 索引
操作符详解(2)(上)
操作符详解(2)(上)
|
7月前
|
索引
操作符之关系操作符,逻辑操作符,条件操作符,逗号表达式,下标引用操作符,函数调用操作符,访问结构体成员操作符
操作符之关系操作符,逻辑操作符,条件操作符,逗号表达式,下标引用操作符,函数调用操作符,访问结构体成员操作符
|
7月前
|
编译器 C语言
操作符的属性,C语言中运算符的优先性和结合性,常见的问题表达式
操作符的属性,C语言中运算符的优先性和结合性,常见的问题表达式
|
9月前
|
C语言
【C语言】 操作符(下): -- 条件操作符 --逗号表达式 -- 下标引用操作符 --表达式求值2
【C语言】 操作符(下): -- 条件操作符 --逗号表达式 -- 下标引用操作符 --表达式求值2
|
9月前
|
C语言 索引
【C语言】 操作符(下): -- 条件操作符 --逗号表达式 -- 下标引用操作符 --表达式求值1
【C语言】 操作符(下): -- 条件操作符 --逗号表达式 -- 下标引用操作符 --表达式求值1
|
10月前
|
存储
操作符详解(1)(上)
操作符详解(1)(上)