C++ 将字符类型指定给int以打印相应的ASCII字符

C++ 将字符类型指定给int以打印相应的ASCII字符,c++,char,int,ascii,C++,Char,Int,Ascii,该代码要求输入一个正整数,第一个输出显示相应的ASCII代码,其他输出则将该整数转换为十进制、八进制和十六进制的等效值。我理解代码的逻辑,但我不理解第10行c=code上的赋值,而不理解第12行c=code上的赋值。当我们“交换”这两个变量时,在后台会发生什么 #include <iostream> #include <iomanip> using namespace std; int main(){ unsigned char c = 0; unsig

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

#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;
}

我可能错了,所以也许其他人可以参与进来,但我相信我知道答案

如果为字符指定了一个数字,则在打印该字符时,它会打印相应的字符。因为c是char类型,所以c=行代码将输入的整数转换为字符。您可以通过将任何int赋值给char变量并将其打印出来来测试这一点

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

这不是交换。c被分配与代码相同的值,然后该值被分配回代码。代码的原始值丢失

我们可以看到这一点,因为无符号字符c通常比无符号整数代码小得多,并且将代码中的值填充到c中可能会丢失一些信息

例如,代码=257。c=代码后;代码仍然是257和c,假设8位字符为1。在code=c之后;,代码和c都将是1。257人失踪


为什么要这样做?当给定一个字符时,运算符so表示表示一个类型的位数。一个字符至少是8位,但几乎总是正好是8位。int至少是16位,但通常是32位。通过将int赋值给char,在隐式类型转换中删除32-8=24位。顺便说一句,这通常会导致编译器警告丢失精度。
<< "\n decimal: " << setw(3) << dec << c