据我所知,它应该依赖于实现,但它返回-1。为什么?
char ch = 255;
int i = ch;
cout<<i;
return 0;
答案 0 :(得分:4)
char
可以是已签名或未签名。 (依赖于实现)
签名字符的最小范围是-127到127(通常为-128到127)。
如果默认情况下char已签名,则ch将无法容纳255(0xFF)并将其静默转换为-1(0xFF)。然后将它类型转换为int并打印,因此输出为-1。
为避免这种情况,请明确使用unsigned char
。 (范围至少为0到255)
4.7积分转换[conv.integral]
[3]如果目标类型已签名,则值可以保持不变 以目的地类型(和位字段宽度)表示; 否则,该值是实现定义的。
答案 1 :(得分:3)
char
可能是(在您的情况下显然是)签名类型,范围从-128到+127。
因此char ch = 255
会触发溢出,从而为签名类型生成实现定义结果。