C++ 关于整数文字的入门段落,需要有人澄清一些要点
C++ Primer paragraph on Integer literals, need someone to clarify some points
我目前正在阅读C++入门(第 5 版(,我正在努力弄清楚作者在关于文字的这一部分中的意思(第 2 章,第 2.1.3 节(:
。默认情况下,十进制文本是有符号的,而八进制和十六进制文本可以是有符号或无符号类型。十进制文本具有文本值适合的最小整数、长整型或长整型(即此列表中的第一种类型(。八进制和十六进制文本具有文本值适合的最小类型的 int、无符号 int、long、无符号 long、long long 或无符号 long long。使用太大而无法容纳最大相关类型的文本是错误的......
在第一句话中,作者的意思是十进制文字是根据C++标准进行签名,而对于八进制和十六进制文字,这取决于编译器?
接下来的三句话确实让我感到困惑,所以如果有人能提供另一种解释,将不胜感激。
如果你有一个整数文本,例如十进制整数文本,编译器必须定义其类型。例如,可以在表达式中使用十进制文本,编译器需要根据表达式的操作数类型确定表达式的类型。
因此,对于十进制整数文本,编译器在以下类型之间进行选择
int
long int
long long int
并选择可以容纳十进制文本的第一种类型。
它不考虑无符号整数类型,例如无符号整数或无符号长整型,尽管它们可以容纳给定的文本。
当编译器处理八进制或十六进制整数文本时,情况会有所不同。在这种情况下,它按给定顺序考虑以下类型
int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
更清楚的是,考虑一个人工的例子来证明这个想法。假设您的值等于 127
。此值可以存储在类型 signed char
中。那么价值128
呢? 它不能存储在 signed char
类型的对象中,因为可以存储在类型 signed char
的对象中的最大正值是 127。
怎么办?我们可以将128
存储在 unsigned char
类型的对象中,因为它的最大值是 255
.但是,编译器更喜欢将其存储在类型为 signed short
的对象中。
但是,如果像0x80
这样指定此值,则编译器将选择类型为 unsigned char
这当然是一个想象的过程。
然而,在现实中,类似的算法用于十进制文字,只有编译器会考虑从int
开始的整数类型来确定十进制文字的类型。
进制(意思是基数为 10(文本是那些没有前缀的文本。作者说这些总是签名的。
5 // signed int (decimal)
12 // signed int (decimal)
也可以根据您提供的后缀对其进行签名或未签名。下面是整数文本语法的完整参考。
5 // signed int
7U // unsigned int
7UL // unsigned long
十六进制(以 8 为基数(值将以 0x
为前缀。
0x05 // int (hex)
同样,八进制(以 8 为基数(的值也以 0
为前缀。
05 // int (octal)
附加到 Cory 的答案:
链接状态中的相关图表
整数文本允许的类型
无后缀,正则十进制
int, long int, long long int(since C++11)
所以十进制数
78625723
由有符号类型表示。
没有后缀十六进制或八进制
int, long int,
unsigned int, unsigned long int
long long int(since C++11)
unsigned long long int(since C++11)
所以 0x 十六进制数
0x78625723
可能由有符号或无符号值表示。
当您的文字值太大而无法容纳在有符号类型中,但确实适合相应的无符号类型时,与此相关。 例如,在具有 16 位 int
和 32 位long
(现在很少见,但规范允许的最小值(的机器上,常量文字0xffff
将是一个unsigned int
,而文字65535
(相同的值(将是一个long
。
当然,您可以使用U
后缀强制后者成为unsigned
;规范的这一部分仅与没有后缀的文本相关。
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- C++相当于整数的 #define
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- 独立于实现的浮点/整数转换
- 使用不同的整数组装字符数组以类似于日期和时间
- 你能在任何独立于架构的低级语言中获得更小的整数吗?
- C++ - 泛型结构的成员在分配双精度时给出错误的值(但适用于整数)
- 对应于 AS3 编号(整数)的C++数据类型是什么?
- 对于作用于整数向量的循环行为异常
- PowerMod函数适用于小整数,不适用于大整数
- C++:二叉搜索树适用于整数,但当我尝试传递字符串时崩溃
- C++查找整数是否存在于矩阵的一列中
- 我的印象是,下面的脚注32适用于整个段落§3.4.1/8,而不仅仅是其第三个要点
- 定义一个行为类似于整数无穷大的对象
- C++ 关于整数文字的入门段落,需要有人澄清一些要点