C 具有有符号和无符号整数的表达式

C 具有有符号和无符号整数的表达式,c,C,添加有符号和无符号值时,我们遵循以下两条规则(从) 否则,如果具有无符号整数类型的操作数的秩大于或等于另一个操作数类型的秩,则具有有符号整数类型的操作数将转换为具有无符号整数类型的操作数的类型 否则,如果带符号整数类型的操作数类型可以表示带符号整数类型的操作数类型的所有值,则带符号整数类型的操作数将转换为带符号整数类型的操作数类型 以下哪项规则将被触发: unsigned int ui = 4; ui = ui + 532; 常量532的类型是int,它是有符号的 查看第一条规则,由于无符号

添加有符号和无符号值时,我们遵循以下两条规则(从)

否则,如果具有无符号整数类型的操作数的秩大于或等于另一个操作数类型的秩,则具有有符号整数类型的操作数将转换为具有无符号整数类型的操作数的类型

否则,如果带符号整数类型的操作数类型可以表示带符号整数类型的操作数类型的所有值,则带符号整数类型的操作数将转换为带符号整数类型的操作数类型

以下哪项规则将被触发:

unsigned int ui = 4;
ui = ui + 532; 

常量
532
的类型是
int
,它是有符号的

查看第一条规则,由于
无符号int
int
具有相同的秩,因此无符号类型的秩大于或等于有符号类型的秩。第一条规则匹配。有符号的
532
在添加之前转换为
unsigned int

即使第一条规则不匹配,加法也无法匹配第二条规则,因为有符号的
int
不能代表
无符号int
的所有值。(可能有符号的
int
unsigned int
s的数量相同,但例如,
-1
是有符号的
int
,而不是
无符号的int
,因此必须至少有一个
无符号的int
不能表示为有符号的
int

请看一看!have look@this一致性实现可以使
int
范围成为
无符号int
范围的子集。
int
的符号位必须是
无符号int
的填充位。对于只支持有符号整数的系统来说,这可能是合理的。(据我所知,现实生活中还没有这样的系统。)