带有符号和无符号整数的表达式

时间:2014-11-04 00:48:47

标签: c

添加有符号和无符号值时,我们遵循这两条规则(来自https://stackoverflow.com/a/2280810/1073672

  

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

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

将触发上述哪些规则:

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

1 个答案:

答案 0 :(得分:2)

常量532的类型为int,已签名。

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

即使第一条规则没有匹配,添加也无法与第二条规则匹配,因为签名的int无法代表unsigned int的所有值。 (int的签名unsigned int可能与-1相同,但例如,int是签名unsigned int但不是unsigned int,因此必须至少有一个int无法表示为已签名的{{1}}。)