C编程以字节为单位存储位

标签 c

#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,请您从上面的代码中解释一下如何为超出边界的值赋值。

提前致谢。

最佳答案

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

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

关于C编程以字节为单位存储位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10407883/

相关文章:

WaitForSingleEvent 可以等待事件重置吗?

c - 如何使用 Intel 内在函数重新排序 128 位 vector ?

c程序函数图参数

c - 静态库头文件

c - 在 C 中获取两个字符串之间的字符串数组

c - C多维数组中的指针地址

c - 像 "GLenum GlewInitResult = glewInit();"这样的声明(?)是做什么的?

c - 如何获得可以分配的最大可用内存块?

c - 数组未正确读取

c - 为什么 getchar() 只在一行的开头识别 EOF?