他们都是无符号的
char16_t 用 u表示
char32_t用U表示
bool 非0都是true
尽量用const而不是#define来作为常量标注 1来可以限定类型,2来可以限定作用域范围
float类型的存储方式: 计算机会分别保存两部分 1部分保存的是值,另一部分是保存对值得缩小放大倍数 (10的倍数)
float的精度比double精度差 如果有可能计算到超过6位的情况下 就使用double 我感觉只要是float 超过3位就可以用double了
因为float的精度只有到前7位 而他这个加1.0 是在第23位添加 无影响 所以 这个结果是0
#include <iostream>
int main()
{
using namespace std;
float a = 2.34E+22f;
float b = a + 1.0f;
cout << "a = " << a << endl;
cout << "b - a = " << b - a << endl;
return 0;
}
E:\cpp\2019-4-12\3>.\fltadd.exe
a = 2.34e+022
b - a = 0
C++ 表达式的运算顺序 先看优先级再看操作数的结合性
计算时一定要考虑到float类型的精度问题 这货就到6位 剩下的就是四舍五入
关于除法的一些东西:
#include <iostream>
int main() {
using namespace std;
cout.setf(ios_base::fixed, ios_base::floatfield);
cout << "Integer division: 9/5 = " << 9 / 5 << endl;
cout << "Floating-point division: 9.0 / 5.0 = ";
cout << 9.0 / 5.0 << endl;
cout << "Mixed division: 9.0/5 = " << 9.0 / 5 << endl;
cout << "double constants: le7/9.0 = ";
cout << 1.e7 / 9.0 << endl;
cout << "float constants: 1e7/9.0f = ";
cout << 1.e7f / 9.0f << endl;
return 0;
}
结果
E:\cpp\2019-4-12\3>divide.exe
Integer division: 9/5 = 1
Floating-point division: 9.0 / 5.0 = 1.800000
Mixed division: 9.0/5 = 1.800000
double constants: le7/9.0 = 1111111.111111
float constants: 1e7/9.0f = 1111111.125000
这表明 除法中其中有一位数是浮点型 结果就是浮点型
默认是double 如果加了f就按float来计算 就很容易损失精度
关于数据类型隐式转换
float 转 int 小数点直接截断, 并且 数值可能会超过int的最大值 这个转换的结果 C++并没有定义应该是什么 所以 很有可能是随机的。
精度高的转换成精度低的数据类型将造成数据的不准确。
有些编译器是不支持 直接将double或者float赋值给int型 会报错
两个short类型变量进行运算赋值给short类型的变量时 会先将这两个short的值转换为int然后进行运算,然后再转换成short。 这么干的原因是运算速度快。这情况也适用于unsigned short 。会转换成unsigned int 这样确保了不会损失数据
其他的类型自动转换规则
强制类型转换:
C++风格:long(i)或C风格 (long)i 都行
或者 static_cast<long> (i) : static_cast<typeName> (value) 这种转换更加严格。但是具体多严格 还没说 15章的时候才说- -好久
不改变i本身而是生成1个新的,指定类型的值(说话要说全 )
auto 声明 自动判断数据类型。 只是简单讲了下 在STL中才用的多(python不都是这样的么 )
第三章完结