C++ 编程/示例/数据和变量
外观
让我们编写一个程序,打印字节可以容纳的每个值。我们该怎么做呢?我们可以编写一个循环,从 0 到 255。在我们的程序中,我们可以从值 0 开始,并等待它再次变为 0 然后退出。这将确保我们遍历字节可以容纳的每个值。
在您的 main() 函数中,编写以下内容。暂时不用担心循环。我们现在更关心输出。
char b=0;
do
{
cout << (int)b << " ";
b++;
if ((b&15)==0) cout << endl;
} while(b!=0);
b 是我们的字节,我们将其初始化为 0。在循环中,我们打印其值。我们将其强制转换为 int,以便打印出数字而不是字符。现在不用担心强制转换或 int。下一行递增我们字节 b 中的值。然后,我们使用代码“b&15”在每 16 个数字后打印一个新行(回车/endl),该代码使用“&”,即按位与运算符,以及值 15(二进制中的 00001111),以给出最低 4 位的值,这将是 16 的每个倍数的 0,因为 16 是二进制中的 00010000,所以用它乘以某些东西只会改变更高位,而不会改变低位。我们这样做是为了能够在一行上打印 16 个值,并在屏幕上同时查看所有 256 个值,因此只需要使用 16 行,假设一行可以容纳 16 个值。
如果您运行此程序,您会注意到一些奇怪的事情。在 127 之后,我们得到了 -128!负数!这些数字从哪里来?事实证明,编译器必须知道我们是否使用可以为负数的数字或只能为正数的数字。这些分别称为有符号数和无符号数。默认情况下,编译器假设我们要使用有符号数,除非我们明确告诉它否则。要解决我们的小问题,在 b 的声明前面添加“unsigned”,使其读取
unsigned char b=0;
问题解决了!