【问题标题】:Type conversion in cc中的类型转换
【发布时间】:2017-05-27 10:19:05
【问题描述】:
#include<stdio.h>
int main(void)
{
 signed char b=0xFF;
 printf("%d\n",b);
return 0;
}

这里 255 的 0xFF 被初始化为 b(有符号字符),但在这里我们知道 b 不能存储它,因为有符号字符的范围是从 -128 到 127。 所以 b 可以是 -128 到 127 之间的任何值。 但我不明白输出到底是怎么变成-1的?

【问题讨论】:

  • 阅读有关二进制补码表示的更多信息。
  • 但在这里我们知道b 无法存储它...不确定您的确切意思。 0xFF 是 8 位,signed char 是 8 位,所以它肯定可以存储它。在 8 个bit signed char 中,0xFF 是 -1 的二进制表示。 %d 表示打印一个整数。当您将b 打印为整数时,它是符号扩展,其值保持为-1。
  • char 正如您所推断的那样,介于 -128 到 127 之间。当您分配的值超过 signed 变量类型的值时... 剩下的部分留给您找出来

标签: c


【解决方案1】:

值被转换为-1的原因是FF16的位模式,即111111112,表示signed char的-1值987654321@ 系统。 -128 的模式是 8016 或 100000002,而 127 的模式是 7F16 或 011111112.

当您调用具有可变参数列表的任何函数时,char 值将转换为 int 值。有符号字符中的 -1 的值代表有符号整数中的 -1,所以这就是被打印的内容。

【讨论】:

    猜你喜欢
    • 2020-11-17
    • 1970-01-01
    • 2010-11-23
    • 2010-09-23
    • 2022-08-27
    • 2012-02-23
    • 2011-01-22
    • 1970-01-01
    相关资源
    最近更新 更多