C++|C++ Primer的变量和基本类型详解
目录
- 1.类型转换
- 含有无符号类型的表达式
- 2.字面值常量
- 整形和浮点型字面值
- 字符和字符串字面值
- 转移序列
- 指定字面值的类型
- 布尔字面值和指针字面值
- 总结
1.类型转换 对象的类型定义了对象能包含的数据和能参与的运算,其中一种运算被大多数类型支持,就是将对象从一种给定的类型转换为另一种相关类型。
比如
- 把非布尔类型的数据赋值给布尔类型时,初始值为0则结果为false,否则为true;
- 将布尔值赋值给非布尔类型时,初始值为false则结果为0,初始值为true则结果为1;
- 将浮点数赋给整数类型时,结果值将仅保留浮点数中小数点之前的部分;
- 将整数值赋给浮点类型时,小数部分记为0,如果证书所占的空间超过浮点类型的容量,精度可能有缺失;
- 当赋给无符号类型一个超出它表示范围的值时,结果是初始值对于无符号类型表示数值总数取模之后的余数,比如:
unsigned char c = -1// 假设char占8比特,结果为255// -1 的二进制表示为 11111111 化为十进制为255
- 当我们赋给带符号类型一个超出他表示范围的值时,结果是未定义的。程序可能继续工作,也可能崩溃。
含有无符号类型的表达式
当一个算数表达式中既有无符号数又有int值时,int值会转换成无符号数(如果表达式中既有带符号类型又有无符号类型,带符号数会自动地转换成无符号数):
unsigned u = 10; // unsigned 为 unsigned int简写int i = 42; std::cout << u + i << std::endl; // 若int占32位,输出为4294967264
注意:无符号数不会小于零,以下for循环为死循环
for(unsigned u = 10; u>=0; --u)std::cout << u << std::endl;
2.字面值常量 形如42的值被称为字面值常量,每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型。
整形和浮点型字面值
整型字面值可以写成。
20 /*十进制数*/024 /*八进制数*/0x14 /*十六进制数*/
整型字面值具体的数据由它的值和符号决定,(尽管整型字面值可以存储在带符号数据类型中,但严格来说,十进制字面值不会是负数,因为符号不在字面值之内,它的作用仅仅是对字面值取负值而已)
浮点型字面值表现为一个小数或科学计数法表示的指数,其中指数部分用E或e标识(3.14159,3.14159E0)
字符和字符串字面值
有单引号括起来的一个字符称为char型字面值,双引号括起来的零个或多个字符则构成字符串型字面值。
'a'"Hello world!"
字符串字面值的类型实际上是由常量字符构成的数组,编译器在每个字符串的结尾处添加一个空字符(’\0’),因此,字符串字面值的实际长度要比它的内容多一。
小技巧:若两个字符串位置紧邻且仅由空格、缩进和换行符分隔,它们实际上是一个整体:
std::cout << "a really, really long string literal "" that spans two lines " << std::endl;
转移序列
在C++中有两类字符程序员不能直接使用:
第一类是不可打印的字符,如退格或其他控制字符,因为它们没有可视的图符;
第二类式C++语言中有特殊含义的字符。
指定字面值的类型
通过添加前缀或者后缀,可以改变整型、浮点型和字符型字面值的默认类型。
u8"hi!"// utf-8字符串字面值1E-3F// 单精度浮点型字面值,类型是float3.14159L// 扩展精度浮点型字面值,类型为long double
布尔字面值和指针字面值
true
和false
是布尔类型的字面值;nullptr
是指针字面值。总结 【C++|C++ Primer的变量和基本类型详解】本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- localStorage过期时间设置的几种方法
- Nebula 在 Akulaku 智能风控的实践(图模型的训练与部署)
- 大咖说|对话路特斯科技副总裁李博(如何看待智能驾驶的未来())
- 打造自己的JavaScript工具库(1.|打造自己的JavaScript工具库(1. 数据类型校验)
- 每日leetcode——3. 无重复字符的最长子串
- 《C++要笑着学》|【C++要笑着学】认识C++ | C++的发展史 | 学习方法建议
- 《C++要笑着学》|【C++要笑着学】缺省参数 | 函数重载
- 《C++要笑着学》|【C++要笑着学】内联函数 | 关键字auto | 范围for | 关键字 nullptr
- C/C++编程(libcurl学习(linux + cmake))
- 《C语言杂俎》|证明堆排序的时间复杂度