这是什么意思(BYTE)-1

时间:2014-06-19 18:31:06

标签: c++

我在读别人的代码:

#define     CPUTYPE_INVALID  ((BYTE)-1)

这是什么意思?我猜它有如下效果,

#define     CPUTYPE_INVALID  255

如果我们已经

typedef unsigned char       BYTE; (in windef.h)

2 个答案:

答案 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;
}

http://ideone.com/DGTkwq

答案 1 :(得分:2)

这是一个C风格的演员阵容。由于BYTE是无符号类型,相当于unsigned char,因此表达式((BYTE)-1)等同于UCHAR_MAX,其中255很可能具有值255。 (这是将超出范围的整数值转换为无符号类型的规则所要求的;值包含在范围内,因此它在范围内。)

它与BYTE的不同之处在于(a)意图更清晰,(b)它保证表达式为255类型,而常量int为输入{{1}}。