对小整数值使用 char 而不是使用 INT

Using char for small integer value instead of using INT

本文关键字:INT char 整数      更新时间:2023-10-16

我正在使用c ++处理一些代码。

字符类型在我的机器中是一个字节,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。

我以为这是由于类型。因此,我将字符修改为 int 并再次运行代码。我确认代码[i]显示了我预期的更正值。

总而言之..我的问题是使用char而不是int有什么问题?

我知道 char 旨在存储字符,但对于一些小的整数值(最多 1 个字节),我们可以使用 char 而不是 int 类型。

这是因为std::coutoperator<<(char)被重载,以至于它将显示与数字对应的ascii字符。与其将类型从char更改为int,不如这样做

for (int i = 0; i < 7; ++i)
    cout << static_cast<int>(code[i]) << endl;

看到这里。