【问题标题】:Assigning char type to int to print corresponding ASCII character将 char 类型分配给 int 以打印对应的 ASCII 字符
【发布时间】:2020-02-26 04:07:10
【问题描述】:

该代码要求一个正整数,然后第一个输出显示相应的 ASCII 代码,其他的用于将整数转换为十进制、八进制和十六进制等价物。我理解代码的逻辑,但我不理解在第 10 行 c=code 上所做的分配,而不是在第 12 行 code=c 上所做的分配。当我们“交换”这两个变量时,后台会发生什么。

#include <iostream>
#include <iomanip>
using namespace std;

int main(){
    unsigned char c = 0;
    unsigned int code = 0;
    cout << "\nPlease enter a decimal character code: ";
    cin >> code;
    c = code; 
    cout << "\nThe corresponding character: " << c << endl;
    code = c; 
    cout << "\nCharacter codes"
    << "\n decimal: " << setw(3) << dec << code
    << "\n octal: " << setw(3) << oct << code
    << "\n hexadecimal: " << setw(3) << hex << code
    << endl;
    return 0;
}

【问题讨论】:

  • 所以它是关于代表一种类型的位数。 char 是(至少,但几乎总是)8 位。 int 至少为 16 位,但更常见的是 32 位。通过将 int 分配给 char,在隐式类型转换中会删除 32-8=24 位。顺便说一下,这通常会导致“精度损失”编译器警告。

标签: c++ char int ascii


【解决方案1】:

我在这里可能是错的,所以也许其他人可以权衡,但我相信我知道答案。

如果你给一个字符分配一个数字,当你打印char 时,它会打印相应的字符。由于cchar 类型,c = code 行将输入的整数转换为字符。您可以通过将任何int 分配给char 变量并打印出来来自行测试。

第二个任务code = c 似乎完全没有必要。

【讨论】:

    【解决方案2】:

    这不是交换。 c 被分配与code 相同的值,然后这个值被分配回codecode 的原始值丢失。

    我们可以看到这一点,因为unsigned char c(通常)比unsigned int code 小得多,并且将code 中的值填充到c 中可能会丢失一些信息。

    例如,code = 257。c = code; 之后 code 仍然是 257 和 c,假设 8 位 char 将是 1。code = c; 之后,code 和 @987654336 @ 将是 1。257 已丢失。

    为什么要这样做?当给定charoperator&lt;&lt; 将打印出编码的字符,完全忽略打印为hexdecoct 的请求。所以

    << "\n decimal: " << setw(3) << dec << c
    

    被浪费了。给定 int &lt;&lt; 将尊重修饰符,但如果 ccode 具有不同的值,则您是在比较苹果和大脚野人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-18
      • 2012-12-10
      • 2018-02-03
      • 2016-12-19
      • 2021-12-17
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      相关资源
      最近更新 更多