我在读别人的代码:
#define CPUTYPE_INVALID ((BYTE)-1)
这是什么意思?我猜它有如下效果,
#define CPUTYPE_INVALID 255
如果我们已经
typedef unsigned char BYTE; (in windef.h)
答案 0 :(得分:2)
(以下假设BYTE是你在windef.h中编写的类型)
假设BYTE
= char
,这会产生-1
,因为它将-1
(整数)转换为char
。这只是-1的C风格演员。
这是在系统定义的BYTE
类型中获得“-1”的方式,无论是有符号还是无符号(在这种情况下,它是最大可表示的)。在签名的情况下,为了表示虚假条目,通常的做法是使用-1值(或者当条目数量有限时使用极值值)
#include <iostream>
#include <string>
using namespace std;
#define BYTE char
#define CPUTYPE_INVALID ((BYTE)-1)
#define BYTE2 unsigned char
#define CPUTYPE_INVALID2 ((BYTE2)-1)
int main() {
cout << to_string(CPUTYPE_INVALID); // -1
cout << to_string(CPUTYPE_INVALID2); // 255
return 0;
}
答案 1 :(得分:2)
这是一个C风格的演员阵容。由于BYTE
是无符号类型,相当于unsigned char
,因此表达式((BYTE)-1)
等同于UCHAR_MAX
,其中255
很可能具有值255
。 (这是将超出范围的整数值转换为无符号类型的规则所要求的;值包含在范围内,因此它在范围内。)
它与BYTE
的不同之处在于(a)意图更清晰,(b)它保证表达式为255
类型,而常量int
为输入{{1}}。