将char类型赋值给int打印相应的ASCII字符

Assigning char type to int to print corresponding ASCII character

该代码要求输入一个正整数,第一个输出显示相应的 ASCII 码,其他代码将整数转换为十进制、八进制和十六进制等值。我理解代码的逻辑,但我不理解第 10 行 c=code 上的赋值与第 12 行 code=c 上的赋值。当我们 'swap' 这两个变量时背景会发生什么。

#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 时,它会打印相应的字符。由于 cchar 类型,因此行 c = code 将输入的整数转换为字符。您可以通过将任何 int 分配给 char 变量并打印出来来自己测试。

第二个赋值,code = c,似乎完全没有必要。

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

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

例如code = 257。在c = code;之后code仍然是257和c,假设一个8位char将是1。 code = c;之后,codec都会是1。257已经丢失了。

为什么要这样做?当给定 char 时,operator<< 将打印出编码的字符,完全忽略打印为 hexdecoct 的请求。所以

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

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