我们都知道,一个字符是8位,所以它可以存储从0到255的值,
如果我用一个更大的值初始化一个字符,比如369,我得到的二进制模式与MSVC12下的113 i.e:01110001相同
它是一个标准,还是未定义的行为?
发布于 2012-10-29 21:22:31
请注意369 - 256 == 113。
4.7积分转换,第2和第3段:
如果目标类型是无符号类型,则结果值是与源整数相同的最小无符号整数(模数2^n,其中n是用于表示无符号类型的位数)。
如果目标类型是有符号的,如果它可以用目标类型(和位字段宽度)表示,则该值不变;否则,该值由实现定义。
但是,char的含义是否与unsigned char或signed char相同,也是由实现定义的。
因此,这种行为确实取决于编译器,尽管大多数都是这样做的。
发布于 2012-10-29 21:29:39
标准char的大小不一定是8位,可以是有符号的也可以是无符号的,所以它是由实现定义的。
引用C++11标准:
3.9.1基本类型basic.fundamental
声明为字符(char)的对象应足够大,以存储实现的基本字符集的任何成员。
..。
它是由实现定义的,一个char对象是否可以保存负值。
发布于 2012-10-29 21:19:39
它溢出了。369 - 256 = 113。
https://stackoverflow.com/questions/13122410
复制相似问题