该标准很明确:当对小于int的整数类型执行算术运算时,该整数会首先提升为有符号int,除非int不能代表原始类型的完整值范围,在这种情况下,提升为unsigned int。
我的问题是:这项政策的动机是什么?为什么将无符号类型提升为有符号类型int,而不是总是unsigned int?
当然,实际上,几乎没有什么区别,因为底层的汇编指令是相同的(只是零扩展),但是存在提升为的关键缺点signed int,而没有明显的好处,因为溢出是有符号算术中的UB,但是-用无符号算术定义。
有历史原因更喜欢签字int吗?是否存在不使用二进制补码算法的体系结构,而是将小的无符号类型提升为带符号int而不是unsigned int更容易/更快?
编辑:我认为这很明显,但是我在这里寻找事实(即解释设计决策的一些文档或参考资料),而不是“主要基于意见”的推测。