cout << sizeof(w) << endl;
重学C++_运算符与表达式
运算符表达式和基本语句
运算符
- 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。
| 算术运算符 |
| :--------: |
| 关系运算符 |
| 逻辑运算符 |
| 位运算符 |
| 赋值运算符 |
| 杂项运算符 |
表达式
- 在程序中,运算符是用来操作数据的,因此,这些数据也被称为操作数。
- 使用运算符将操作数连接而成的式子称为:表达式。
| 表达式具有如下特点 |
| :----------------------------------------------------------: |
| 常量和变量都是表达式,例如,常量3.14、变量i
|
| 运算符的类型对应表达式的类型,例如,算术运算符对应算术表达式 |
| 每一个表达式都有自己的值,即表达式都有运算结果 |
算术运算符
代码
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int b = 20;
cout << a + b << endl;// 30
cout << a - b << endl; //-10
cout << a * b << endl;//200
cout<<b/a<< endl;//2
cout << 15/a<< endl;// 1
cout << 15.0/a<< endl; // 1.5
cout << b%a<< endl;//0
cout<<++a << endl;//11
cout<<--a<< endl;// 10
}
关系运算符
代码
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int b = 20;
//关系运算符
//0不为真,1为真
cout << (a == b) << endl; //0
cout << (a == b) << endl; // 0
cout << (a != b) << endl; // 1
cout << (a > b) << endl; // 0
cout << (a < b) << endl; // 1
cout << (a >= b) << endl; // 0
cout << (a <= b) << endl; //1
}
逻辑运算符
代码
#include <iostream>
using namespace std;
int main()
{
//0不为真,1为真
//逻辑运算符
int A = 1;
int B = 0;
cout << (A && B) << endl; //0
cout << (A || B) << endl; //1
cout << !(A && B) << endl; //1
}
拓展:To be or not to be, that's a question
//To be or not to be, that's a question.
cout << "-------------To be or not to be, that's a question.------------------- -" << endl;
cout << (A == true || A != true) << endl; //1
拓展:德摩根律
拓展:assert断言(用于测试)
- 程序在我的假设条件下,能够正常良好的运作,其实就相当于一个 if 语句。
if(假设成立)
{
程序正常运行;
}
else
{
报错&&终止程序!(避免由程序运行引起更大的错误)
}
- 如果assert后输出不符合预期,则报错。
- 如
assert(!(bA || bB) == (!bA && !bB));// 1
,将其!(bA || bB)
改为(bA || bB)
则报错。
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
cout << "-------------assert断言.------------------- -" << endl;
int bA = false;
int bB = true;
assert(!(bA || bB) == (!bA && !bB));// 1
assert( !(bA && bB) == (!bA | !bB));// 1
// 报错
//assert((bA || bB) == (!bA && !bB));// 报错
}
赋值运算符
代码
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
int a = 10;
int b = 20;
cout << "-------------赋值运算符------------------- -" << endl;
int C = a + b;
cout << C << endl; C += a; //30
cout << C << endl; C -= a; // 40
cout << C << endl; C *=a; // 30
cout << C << endl; C /= a; // 300
cout << C << endl; C %= a; // 30
cout << C << endl; // 0
}
位运算符
位逻辑运算符
移位运算符
优先级
代码
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
int a = 10;
int b = 20;
cout << "-------------位运算符------------------- -" << endl;
cout << (a && b) << endl;// 与 1
cout << (a | b) << endl;//或 30
cout << (a ^ b) << endl;//异或 30
cout << (~a) << endl;//取反 -11
cout << (a << 2) << endl;//左移 40
cout << (a >> 2) << endl;//右移 2
}
杂项运算符及运算符的优先级
杂项运算符
代码_1
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int b = 20;
cout << "-------------杂项运算符------------------- -" << endl;
cout << sizeof(A) << endl;//4
int C = a > b ? 1 : 0;
cout << C << endl; //0
int D = a < b ? 1 : 0;
cout << D << endl;//1
int E = (a,b, C);
cout << E << endl; //0
float F = float(E);
cout << F << endl;//0
cout << &F << endl;
float* P = &F; //006FF93C
cout << P << endl; //006FF93C
cout << *P << endl; //0
}
代码_2
#include <iostream>
using namespace std;
int main()
{
//结构体
struct Week
{
short Sunday = 0;
short Monday = 1;
short Tuesday = 2;
short Wednesday = 3;
short Thursday = 4;
short Friday = 5;
short Saturday = 6;
};
Week w;
cout << w.Friday << endl; // 5
cout << sizeof(w) << endl;// 14
}
运算符的优先级
- 一元运算符优先级高于对应的二元运算符。
- 弄不清楚优先级,就加
括号()
。
提升补充部分:补码
机器数和真值
机器数
真值
- 真正的数学意义上的数值。
- 因为第一位是符号位,所以机器数的形式值就不等于真正的数值。
00000000000000000000000000000011 -> +3
无符号数的编码
有符号数的补码
另一种计算补码的方法
补码数值范围举例
字节序(Byte Ordering)
一个字(32位机器采用32bits字长4bytes)在内存中如何以byte来存放的?
观察机器数
#include <iostream>
using namespace std;
int main()
{
cout << "------------- 观察机器数------------------- -" << endl;
int i1 = 0;
int i2 = -1;
int i3 = -2147483648;
int i4 = 2147483647;
unsigned int u1 = 0;
unsigned int u2 = 4294967295;
unsigned int u3 = 2147483648;
unsigned int u4 = 2147483647;
}
提升补充部分:补码及位运算说明
验证真值
#include <iostream>
using namespace std;
//二进制转无符号整型
unsigned int B2U(unsigned int num)
{
return (unsigned int)(num);
}
//二进制转有符号整型
int B2T(int num)
{
return (int)(num);
}
int main()
{
cout << "------------- 验证真值------------------- -" << endl;
cout << B2T(Ox00000000) << endl;
cout << B2T(OxFFFFFFFF) << endl;
cout << B2T(Ox80000000) << endl;
cout << B2T(Ox7FFFFFFF) << endl;
cout << endl;
cout << B2U(Ox00000000) << endl;
cout << B2U(OxFFFFFFFF) << endl;
cout << B2U(Ox80000000) << endl;
cout << B2U(Ox7FFFFFFF) << endl;
}
Comments | NOTHING