【发布时间】:2021-10-04 13:02:33
【问题描述】:
我(想我)理解不同变量类型的数学是如何工作的。例如,如果我超过了 unsigned int 变量的最大限制,它将循环回到 0。
我不明白unsigned char 这段代码的行为:
#include<iostream>
int main() {
unsigned char var{ 0 };
for(int i = 0; i < 501; ++i) {
var += 1;
std::cout << var << '\n';
}
}
这只是输出1...9,然后是一些符号和大写字母,然后它什么都不打印。它不会循环回到值 1...9 等。
另一方面,如果我在打印之前转换为int:
#include<iostream>
int main() {
unsigned char var{ 0 };
for(int i = 0; i < 501; ++i) {
var += 1;
std::cout << (int)var << '\n';
}
}
它确实从1...255 打印,然后从0...255 循环返回。
这是为什么呢?似乎 unsgined char 变量 确实 循环(正如我们从 int 转换中看到的那样)。
使用unsigned char 变量进行数学运算是否安全?我在这里看到的行为是什么?
【问题讨论】:
-
什么编译器在编译这个,你用什么命令行来运行它? 1..9 的非重复行为可能是由于您使用的 shell 如何处理特定的不可打印字符(而不是 C++ 事物)。
-
@JohnFilleau 我使用
g++ (GCC) 11.1.0作为g++ test.cpp -o test。并以./test的身份运行 -
你有什么不同吗?例如重复的 1..9?
-
我看到重复的 1..9,以及 ASCII 集之前和之后的不可打印的替代品。但是 1..9 肯定会重复。