类型何时提升为无符号 int
When does a type get promoted to an unsigned int?
这篇文章说:
如果原始类型的所有值都可以表示为 int,则 较小类型的值将转换为 int;否则,它是 转换为无符号整数
signed/unsigned char
和signed/unsigned short
的所有值都可以表示为int
,那么一个类型什么时候被提升为unsigned int
呢?
short
不能长于int
但在某些平台上,它的大小可能相同。int
和long
也是如此.这意味着,如果"较小"的没有符号,那么"较大"的也必须是无符号的。
这篇文章使用了草率的术语。源类型不必"小于"int
。以下是C++11标准的内容:
除
bool
、char16_t
、char32_t
或wchar_t
以外的整数类型的 prvalue,其整数转换 秩 (4.13) 小于int
int
的秩 如果int
可以表示所有 源类型的值;否则,可以将源 PRvalue 转换为类型unsigned int
的 PR值。
例如,有些平台上的unsigned short
和int
都是16位长。然而,根据定义,unsigned short
的等级低于int
,需要整体晋升。在这种情况下,int
不能表示 unsigned short
类型的所有值,因此提升是 unsigned int
。
编辑:C99有类似的措辞:
可以在表达式中使用以下内容,无论
int
或unsigned int
用于:整数
- 类型整数转换排名较低的对象或表达式 大于或等于
int
和unsigned int
的等级。- 类型
_Bool
、int
、signed int
或unsigned int
的位域。如果
int
可以表示原始类型的所有值,则该值将转换为int
; 否则,它将转换为unsigned int
。这些称为整数 促销。48) 所有其他类型均因整数促销而保持不变。
好吧,如果sizeof(char) == sizeof(int),那么无符号char应该被提升为无符号的int
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 是否可以将无符号 int 的最大值转换为 int 并将结果转换为 -1?
- 为什么QByteArray的大小是"int"而不是"无符号int"
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 使用无符号int作为二进制来在c++中实现一个集
- C++如何将变量传递给带有无符号 int & 的参数uint16_t函数?
- 为什么我不能使用在 Visual C++ 32 位中实现运算符无符号 int() 作为数组索引的类?
- 视觉C++转换和写入值为 10 的无符号 int 给出 5 个字节
- uint8_t在转换为无符号 int 时未打印正确的值
- G++ 错误:重载的"abs(无符号 int)"的调用不明确
- 将 3D 矢量浮点打包到无符号 int 中并将其解压缩
- 如何使用 JNI 将 double 和无符号 int 从本机 c 库返回到 java
- 为什么printf和cout为此无符号int提供了不同的输出
- memcpy 从无符号字符 * 到无符号 int
- C++ 重载与有符号和无符号 int 不同
- 创建具有未定义溢出的无符号 int
- 将大双精度转换为无符号 int 期间堆栈损坏
- 错误:成员引用基类型"uint32_t"(也称为"无符号 INT")不是结构或联合
- 无符号int的比较始终是正确的(NPOS问题?)