gpt4 book ai didi

c - char 到 int 转换输出背后的原因是什么?

转载 作者:行者123 更新时间:2023-11-30 21:40:54 26 4
gpt4 key购买 nike

例如:

int x = 65535; char y = x; printf("%d\n", y)

这将输出-1。无论如何要手动得出这个吗?

最佳答案

为了手动得出此结果,您需要了解系统的几个实现定义的方面 - 即

  • char 是否已签名
  • 如果 char 有符号,则使用什么表示方案
  • 您的系统如何处理无法用窄类型精确表示的值的窄化转换。

尽管标准允许实现来决定,但缩小转换的一种非常常见的方法是截断不适合窄类型的位。假设这是您的系统采用的方法,计算输出的第一部分是找到要转换的 int 值的最后八位。在您的例子中,65535 是 11111111111111112,因此最后八位都是 1。

现在您需要决定 111111112 的解释。在您的系统上,char 是有符号的,并且系统使用负值的补码表示,因此该模式被解释为八位 -1 值。

当您调用printf时,带符号的char的八位值被提升为int,因此保留的值被打印。

char 默认情况下无符号的系统上,相同的模式将被解释为 255。

关于c - char 到 int 转换输出背后的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48883047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com