C++ Primer 第2章 变量和基本类型 复习笔记
作者:互联网
第2章 变量和基本类型
2.1 基本内置类型
2.1.1 算数类型
这一小节介绍了C++中基本算数类型
2.1.2 类型转换
变量赋值大多都能转换成相应类型
下面是几个比较坑的点:
- 类型转换向 0 取整 (C++11)
将浮点型赋值给int型时,int型是直接舍去小数部分
// 最终i=1 double d=1.5; int i=d;
当d是负数时
// 最终i=-1 double d=-1.5; int i=d;
- int相除也是向0取整
当结果是正数
// 5 / 3 = 1.67 // 此时 c = 1 向 0 取整 int a = 5, b = 3; int c = a / b;
当结果是负数
// -5 / 3 = -1.67 // 此时 c = -1 向 0 取整 int a = -5, b = 3; int c = a / b;
- 求余运算和求模运算
求余运算和求模运算概念很相似,容易混淆
不同点:
求余运算商向0取整
如-5对3求余:(-5) / 3 = -1
(-5) mod 3 = -5 - (3 * (-1)) = -2求余运算商向0取整
如-5对3求余:(-5) / 3 = -2
(-5) mod 3 = -5 - (3 * (-2)) = 1
- C++中的%是 求余运算 符 不是求模运算符
// a的最终结果是-2 // 在c和cpp中 除法是向0取整 // (-5) / 3 = -1 // 所以 (-5) mod 3 = -5 - (3 * (-1)) = -2 int a = (-5) % 3;
- 对unsigned类型赋负值 会进行 求模运算
// unsigned char 保存 0~255 共 256 个数 // 对其赋-1 // -1先对256取模 注意是取模 得到255 // 再将 255 赋值给 c unsigned char c = -1; // 对无符号类型赋有符号值将会发生如此转换
- 坑爹的无符号类型
无符号类型和有符号类型进行四则运算时 编译器会先将有符号类型转化为无符号类型
若有符号类型有赋值 则会执行上述对容量求模运算unsigned u = 10; int i = -42; // r是unsigned // 在int是32bits时 结果为4294967264 // 显然结果不符合预期 auto r = u + i;
unsigned有可能影响for循环
// 这个循环永远也不可能停下 因为unsigned永远不可能<0 for (unsigned u = 10; u >= 0; --u) { std::cout << u << std::endl; }
因此 再使用unsigned时特别要注意上述两点
标签:复习,int,unsigned,C++,取整,类型,Primer,求余,运算 来源: https://blog.csdn.net/u011541325/article/details/111397899