我正在使用c ++编写一些代码。
类型char是我机器中的一个字节,int类型是四个字节。
由于我的输入值低于100,我使用char类型而不是整数类型,以便以有效的方式进行处理,如下面的代码所示。
int do_main(int argc, const char *argv[]) {
int TC;
cin >> TC;
while (TC--) {
unsigned char num;
char code[7];
for (int i = 0; i < 7; ++i) code[i] = 0;
cin >> num;
int idx = 0;
while (1) {
code[7-1-idx++] = num % 2;
num /= 2;
if (num < 2) break;
}
code[7 - 1 - idx] = num;
for (int i = 0; i < 7; ++i) cout << code[i] << endl;
}
return 0;
}
正如您可以看到上面的代码,10位数值被转换为2位类型。但是,我的问题是价值不是我的预期。它显示了一些不是1或0的奇怪字符。
我认为这是由于类型。因此我将char修改为int并再次运行代码。我确认代码[i]显示了我预期的修正值。
总结..我的问题是使用char而不是int?
有什么问题我知道char的目的是存储字符但是对于一些小的整数值(最多1个字节),我们可以使用char而不是int类型。
答案 0 :(得分:2)
这是因为std::cout
&#39; s operator<<(char)
被重载,因此它将显示与该数字对应的ascii字符。您可以这样做
char
更改为int
for (int i = 0; i < 7; ++i)
cout << static_cast<int>(code[i]) << endl;
请参阅this。