运算符

image.png

表达式

image.png

算术运算符

image.png

  1. //// 算术运算符示例
  2. //std::cout << A + B << std::endl; // 30
  3. //cout << A - B << endl; // -10
  4. //cout << A*B << endl; // 200
  5. //cout << B / A << endl; // 2
  6. //cout << 15 / A << endl; // 1
  7. //cout << 15.0 / A << endl; // 1.5
  8. //cout << B%A << endl; // 0
  9. //cout << ++A << endl; // 11
  10. //cout << A << endl; // 11
  11. //cout << --A << endl; // 10
  12. //cout << A << endl; // 10

关系运算符

image.png

  1. //// 关系运算符示例
  2. //cout << (A == B) << endl; // 0
  3. //cout << (A != B) << endl; // 1
  4. //cout << (A > B) << endl; // 0
  5. //cout << (A < B) << endl; // 1
  6. //cout << (A >= B) << endl; // 0
  7. //cout << (A <= B) << endl; // 1

逻辑运算符

image.png

  1. //// 逻辑运算符示例
  2. //bool bA = false, bB = true;
  3. //// to be or not to be
  4. //cout << ( bA == true || bA != true ) << endl; // 1
  5. //cout << (bB == true || bB != true) << endl; // 1
  6. //// 德*摩根率
  7. //assert( !(bA || bB) == (!bA && !bB) ); // 1
  8. //assert( !(bA && bB) == (!bA || !bB) ); // 1
  9. //bA = false, bB = false;
  10. //assert( !(bA || bB) == (!bA && !bB) ); // 1
  11. //assert( !(bA && bB) == (!bA || !bB) ); // 1
  12. //bA = true, bB = true;
  13. //assert( !(bA || bB) == (!bA && !bB) ); // 1
  14. //assert( !(bA && bB) == (!bA || !bB) ); // 1
  15. //bA = true, bB = false;
  16. //assert( !(bA || bB) == (!bA && !bB) ); // 1
  17. //assert( !(bA && bB) == (!bA || !bB) ); // 1

赋值运算符

image.png
image.png

  1. //// 赋值运算符
  2. //int C = A + B;
  3. //cout << C << endl;
  4. //C += A;
  5. //cout << C << endl;
  6. //C -= A;
  7. //cout << C << endl;
  8. //C *= A;
  9. //cout << C << endl;
  10. //C /= A;
  11. //cout << C << endl;
  12. //C %= A;
  13. //cout << C << endl;
  14. //C <<= A;
  15. //cout << C << endl;
  16. //C >>= A;
  17. //cout << C << endl;
  18. //C &= A;
  19. //cout << C << endl;
  20. //C ^= A;
  21. //cout << C << endl;
  22. //C |= A;
  23. //cout << C << endl;

位运算符

image.png
image.png
image.png

  1. // 位运算
  2. //cout << (A&B) << endl; // 01010 & 10100 = 00000 ==> 0
  3. //cout << (A | B) << endl; // 01010 | 10100 = 11110 ==> 30
  4. //cout << (A^B) << endl; // 01010 ^ 10100 = 11110 ==> 30
  5. //cout << (~A) << endl; // ~0000000000001010 = 11111111111110101 ==> 0000000000001011 ==》 -11
  6. //cout << (A << 2) << endl; // 00001010 << 2 ==> 00101000‬ ==> 40
  7. //cout << (A >> 2) << endl;// 00001010 >> 2 ==> 00000010 ==> 2

杂项运算符

image.png

运算符优先级

image.png
image.png
image.png

  1. // 杂项运算符示例
  2. //cout << sizeof(A) << endl; // 4
  3. //int C = A > B ? 1 : 0;
  4. //cout << C << endl; // 0
  5. //int D = A < B ? 1 : 0;
  6. //cout << D << endl; // 1
  7. //int E = (A, B, C);
  8. //cout << E << endl; // 0
  9. //float F = float(E);
  10. //cout << F << endl; // 0
  11. //cout << &F << endl; // 0xFFXXX
  12. //float * P = &F;
  13. //cout << P << endl; // 0xFFXXX
  14. //cout << *P << endl; // 0
  15. //typedef struct {
  16. // short Sunday = 0;
  17. // short Monday = 1;
  18. // short Tuesday = 2;
  19. // short Wednesday = 3;
  20. // short Thursday = 4;
  21. // short Friday = 5;
  22. // short Saturday = 6;
  23. //} Week;
  24. //Week w;
  25. //cout << w.Friday << endl; // 5
  26. //cout << sizeof(w) << endl; // ?

注释

image.png
image.png
image.png
image.png
image.png

补码

image.png
image.png
image.png
image.png

image.png
UMax 无符号数
TMin 有符号位最小值
TMax 有符号最大值

一文搞懂原码、反码、补码

字节序

image.png

image.png
image.png

所有代码

  1. # include <assert.h>
  2. # include <iostream>
  3. using namespace std;
  4. // 二进制转无符号整型
  5. unsigned int B2U(unsigned int num)
  6. {
  7. return (unsigned int)(num);
  8. }
  9. // 二进制转有符号整型
  10. int B2T(int num)
  11. {
  12. return (int)(num);
  13. }
  14. int main()
  15. {
  16. int A = 10;
  17. int B = 20;
  18. //// 算术运算符示例
  19. //std::cout << A + B << std::endl; // 30
  20. //cout << A - B << endl; // -10
  21. //cout << A*B << endl; // 200
  22. //cout << B / A << endl; // 2
  23. //cout << 15 / A << endl; // 1
  24. //cout << 15.0 / A << endl; // 1.5
  25. //cout << B%A << endl; // 0
  26. //cout << ++A << endl; // 11
  27. //cout << A << endl; // 11
  28. //cout << --A << endl; // 10
  29. //cout << A << endl; // 10
  30. //// 关系运算符示例
  31. //cout << (A == B) << endl; // 0
  32. //cout << (A != B) << endl; // 1
  33. //cout << (A > B) << endl; // 0
  34. //cout << (A < B) << endl; // 1
  35. //cout << (A >= B) << endl; // 0
  36. //cout << (A <= B) << endl; // 1
  37. //// 逻辑运算符示例
  38. //bool bA = false, bB = true;
  39. //// to be or not to be
  40. //cout << ( bA == true || bA != true ) << endl; // 1
  41. //cout << (bB == true || bB != true) << endl; // 1
  42. //// 德*摩根率
  43. //assert( !(bA || bB) == (!bA && !bB) ); // 1
  44. //assert( !(bA && bB) == (!bA || !bB) ); // 1
  45. //bA = false, bB = false;
  46. //assert( !(bA || bB) == (!bA && !bB) ); // 1
  47. //assert( !(bA && bB) == (!bA || !bB) ); // 1
  48. //bA = true, bB = true;
  49. //assert( !(bA || bB) == (!bA && !bB) ); // 1
  50. //assert( !(bA && bB) == (!bA || !bB) ); // 1
  51. //bA = true, bB = false;
  52. //assert( !(bA || bB) == (!bA && !bB) ); // 1
  53. //assert( !(bA && bB) == (!bA || !bB) ); // 1
  54. // 位运算
  55. //cout << (A&B) << endl; // 01010 & 10100 = 00000 ==> 0
  56. //cout << (A | B) << endl; // 01010 | 10100 = 11110 ==> 30
  57. //cout << (A^B) << endl; // 01010 ^ 10100 = 11110 ==> 30
  58. //cout << (~A) << endl; // ~0000000000001010 = 11111111111110101 ==> 0000000000001011 ==》 -11
  59. //cout << (A << 2) << endl; // 00001010 << 2 ==> 00101000‬ ==> 40
  60. //cout << (A >> 2) << endl;// 00001010 >> 2 ==> 00000010 ==> 2
  61. //// 赋值运算符
  62. //int C = A + B;
  63. //cout << C << endl;
  64. //C += A;
  65. //cout << C << endl;
  66. //C -= A;
  67. //cout << C << endl;
  68. //C *= A;
  69. //cout << C << endl;
  70. //C /= A;
  71. //cout << C << endl;
  72. //C %= A;
  73. //cout << C << endl;
  74. //C <<= A;
  75. //cout << C << endl;
  76. //C >>= A;
  77. //cout << C << endl;
  78. //C &= A;
  79. //cout << C << endl;
  80. //C ^= A;
  81. //cout << C << endl;
  82. //C |= A;
  83. //cout << C << endl;
  84. // 杂项运算符示例
  85. //cout << sizeof(A) << endl; // 4
  86. //int C = A > B ? 1 : 0;
  87. //cout << C << endl; // 0
  88. //int D = A < B ? 1 : 0;
  89. //cout << D << endl; // 1
  90. //int E = (A, B, C);
  91. //cout << E << endl; // 0
  92. //float F = float(E);
  93. //cout << F << endl; // 0
  94. //cout << &F << endl; // 0xFFXXX
  95. //float * P = &F;
  96. //cout << P << endl; // 0xFFXXX
  97. //cout << *P << endl; // 0
  98. //typedef struct {
  99. // short Sunday = 0;
  100. // short Monday = 1;
  101. // short Tuesday = 2;
  102. // short Wednesday = 3;
  103. // short Thursday = 4;
  104. // short Friday = 5;
  105. // short Saturday = 6;
  106. //} Week;
  107. //Week w;
  108. //cout << w.Friday << endl; // 5
  109. //cout << sizeof(w) << endl; // ?
  110. // 补码机器数调整展示
  111. //int i1 = 0;
  112. //int i2 = -1;
  113. //int i3 = -2147483648;
  114. //int i4 = 2147483647;
  115. //unsigned int u1 = 0;
  116. //unsigned int u2 = 4294967295;
  117. //unsigned int u3 = 2147483648;
  118. //unsigned int u4 = 2147483647;
  119. // 补码的真值验证
  120. cout << B2T(0x00000000) << endl;
  121. cout << B2T(0xFFFFFFFF) << endl;
  122. cout << B2T(0x80000000) << endl;
  123. cout << B2T(0x7FFFFFFF) << endl;
  124. cout << endl;
  125. cout << B2U(0x00000000) << endl;
  126. cout << B2U(0xFFFFFFFF) << endl;
  127. cout << B2U(0x80000000) << endl;
  128. cout << B2U(0x7FFFFFFF) << endl;
  129. return 0;
  130. }

image.png