signed char to 0x80导致截断常量值

时间:2016-07-08 14:05:39

标签: c++

int _tmain(int argc, _TCHAR* argv[])
{
    signed char min = -128;  //line1
    signed char min2 = 0x80; //line2
}

第1行,好的 第2行,警告C4309'转换':截断常数值

VS2010,-WX -W4

0x80与-128相同,出了什么问题?

2 个答案:

答案 0 :(得分:6)

相同:0x80是128,而不是-128。

初始化时很可能转换到-128,尽管标准不保证这一点:

  

如果目标类型已签名,则该值如果可以在目标类型(和位字段宽度)中表示,则不会更改;否则,该值是实现定义的

答案 1 :(得分:1)

signed char的范围为-128到127(包括两者)。您正在为它分配128(0x80)。因此截断它,因为它超出了范围。