在C中被签名为无符号转换-它总是安全的吗?假设我有以下C代码。unsigned int u = 1234;int i = -5678;unsigned int result = u + i;这里正在进行什么隐式转换,这段代码对所有的值都是安全的吗?u和i?(安全,从某种意义上说,即使结果在本例中,将溢出到某个巨大的正数,我可以将其转换回INT得到真正的结果。)
3 回答
慕少森
TA贡献2019条经验 获得超9个赞
当具有整数类型的值转换为_bool以外的另一个整数类型时,如果该值可以由新类型表示,则它将保持不变。
否则,如果新类型没有符号,则通过重复添加或减去比新类型中可以表示的最大值多一个值来转换值,直到该值位于新类型的范围内为止。
否则,将对新类型进行签名,并且不能在其中表示值;结果要么是实现定义的,要么引发实现定义的信号。
unsigned int u = 1234;int i = -5678;unsigned int result = u + i;
UINT_MAX + 1 - 5678
UINT_MAX + 1 - 4444
.
添加回答
举报
0/150
提交
取消