【发布时间】:2017-11-29 21:34:15
【问题描述】:
在 C++ 程序中,我有一些 char buf[256]。问题出在这里:
if (buf[pbyte] >= 0xFF)
buf[++pbyte] = 0x00;
即使buf[pbyte] 等于 255 AKA 0xFF,这也总是返回 false,如在即时窗口和监视窗口中所见。因此该语句不会被执行。但是,当我将其更改为以下时:
if (buf[pbyte] >= char(0xFF))
buf[++pbyte] = 0x00;
程序有效;怎么来的?
【问题讨论】:
-
根据 C++ 语言规范,
char类型的最大保证范围为 255。不能有大于最大值的值。 -
char通常介于 -128 和 +127 之间。赔率很好,它永远无法达到 255。 -
我第一次使用 == 然后我使用 >= 但没有帮助。最终我自己使用了 char(0xFF) 而不是 0xFF。似乎当 0xFF 被视为 int 而不是转换为 char 时,代码会失败。如果我将 0xFF 转换为 char 则无论我使用 >= 还是 == 都有效
-
好的,但是 char 中的 -1 将是 0xFF 不是设置了所有位吗?为什么0xFF不被视为-1?我在这里错过了什么?
-
原始 0xFF 是
int。 255 对于int来说就可以了。