【问题标题】:C++ - Assigning int to char then assigning char to another intC++ - 将 int 分配给 char 然后将 char 分配给另一个 int
【发布时间】:2018-02-03 06:13:13
【问题描述】:

我有这段代码:

#include <stdio.h>
#include <iostream>
int main(int n, char** args)
{
    int i = 140;
    char c = i;
    int j = c;
    printf("%d", j);
    system("pause");
}

输出:

-116

据我了解,char c = i 会将 ASCII 码为 140 的字符分配给 c,但我想知道之后分配 int j = c; 时发生了什么,-116 的值从何而来?

如果我将char c = i; 更改为unsigned char c = i;,则输出为140。 如果我不在这里使用unsigned,是否有办法让j 的值等于140? (假设 i >= 0 且 i

【问题讨论】:

    标签: casting char int


    【解决方案1】:

    range of values for an unsigned char 包括 [0,255] - 但有符号字符的值范围是 [-128,127] 包括在内。

    140 的值超出了有符号字符的范围,因此它溢出并回绕到 -116。至少这似乎正在发生 - 有符号整数的溢出是undefined behaviour

    如果不使用unsigned charchar 的更大替代方案,实际上没有任何方法可以避免这种情况 - 您只是试图表示一个无法由该类型表示的值。

    【讨论】:

      猜你喜欢
      • 2012-12-10
      • 2021-12-17
      • 2023-03-26
      • 2023-02-22
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多