int _tmain(int argc, _TCHAR* argv[])
{
signed char min = -128; //line1
signed char min2 = 0x80; //line2
}
第1行,好的 第2行,警告C4309'转换':截断常数值
VS2010,-WX -W4
0x80与-128相同,出了什么问题?
答案 0 :(得分:6)
它不相同:0x80
是128,而不是-128。
初始化时很可能转换到-128,尽管标准不保证这一点:
如果目标类型已签名,则该值如果可以在目标类型(和位字段宽度)中表示,则不会更改;否则,该值是实现定义的
答案 1 :(得分:1)
signed char
的范围为-128到127(包括两者)。您正在为它分配128(0x80)。因此截断它,因为它超出了范围。