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
的填充位。对于只支持有符号整数的系统来说,这可能是合理的。(据我所知,现实生活中还没有这样的系统。)