对小整数值使用 char 而不是使用 INT
Using char for small integer value instead of using INT
我正在使用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::cout
的operator<<(char)
被重载,以至于它将显示与数字对应的ascii字符。与其将类型从char
更改为int
,不如这样做
for (int i = 0; i < 7; ++i)
cout << static_cast<int>(code[i]) << endl;
看到这里。
相关文章:
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- C ++如何在使用"tolower"时将char转换为int
- 在标准中,模板参数的语法在哪里定义,例如,'std::function<int(char)>'?
- 类型为 'std::map< char,int > 的 <Swig 对象的代理
- 声明具有两种类型的变量:"int char"
- 定义.cpp中常数int/char*
- Qt5 对'QApplication::QApplication(int&, char**, int)'的未定义引用
- 将int/char插入数据库
- 从 std::vector 转换为<int> char[] C++
- 为什么INT(char)的比较不起作用
- 使用int+char组合uint8_t
- 为什么这个返回值?C++int/char混淆
- 向量到 int<char> 与向量<wchar_t>到 int
- Evaluate an int, char and int
- 接收错误"no matching function for call to 'getline(std::ifstream&, int&, char)'"
- reinterpret_cast<int*>(char*) vs. static_cast<int*>(static_cast<void*>(char*)) --
- 将类型int(C::*)(int, char)转换为类型int(int, char)
- 如何添加多位数的int和char,其中输出为int+char
- 是int, char也是抽象数据类型