0
#include<stdio.h>

int main()
{
    char a = 128;
    char b = -128;
    printf("a is %d -- b is %d \n",a,b);

    return 0;
}

输出是:

a is -128 -- b is -128

由于带符号的字符范围是从 0 到 127,请从上面的代码中解释如何为超出边界值分配值。

提前致谢。

4

1 回答 1

4

类型的范围char取决于实现。如果它是有符号类型,那么它的范围至少是从 -128 到 127,如果它是无符号类型,它的范围至少是从 0 到 255(这些是该类型必须至少支持的范围,类型支持的范围实际上可能比这更大,具体取决于实现)。

另请注意,当您将整数分配给不能保存该值的有符号类型时,您正在调用未定义的行为。因此,将 128 分配给不能容纳 128 的有符号字符(例如,当 128 大于 时CHAR_MAX)正在调用未定义的行为。在这种情况下,它已经回绕到,-128因为它与持有 128 的 unsigned char 类型共享相同的字节表示,但与所有未定义行为的实例一样,您不能保证在所有实现中都是这种情况。

于 2012-05-02T04:56:54.550 回答