Czytam kod kogoś innego:
#define CPUTYPE_INVALID ((BYTE)-1)
Co to znaczy? Myślę, że ma to taki sam efekt jak poniżej,
#define CPUTYPE_INVALID 255
jeśli już mamy
typedef unsigned char BYTE; (in windef.h)
Odpowiedzi:
2 dla odpowiedzi № 1(poniższe założenia zakładają, że BYTE jest typem, ponieważ napisałeś go w windef.h)
Zarozumiały BYTE
= char
, to daje -1
od czasu konwersji -1
(liczba całkowita) jako char
. To tylko rzut w stylu C na -1.
Jest to sposób na uzyskanie "-1" w zdefiniowanym systemie BYTE
typ, podpisany lub niepodpisany (w tym przypadkujest to maksymalna reprezentowalna.) W podpisanym przypadku, aby wskazać fałszywy wpis, powszechną praktyką jest używanie wartości -1 (lub skrajnej, gdy masz ograniczoną liczbę wpisów)
#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;
}
2 dla odpowiedzi nr 2
Jest to obsada w stylu C. Odtąd BYTE
jest typem bez znaku, równoważnym unsigned char
, ekspresja ((BYTE)-1)
jest równa UCHAR_MAX
, który najprawdopodobniej ma tę wartość 255
. (Jest to wymagane przez reguły konwersji wartości całkowitej spoza zakresu na typ bez znaku, wartość jest zawijana, aby znajdowała się w zasięgu).
Różni się od sprawiedliwego 255
w tym (a) intencja jest jaśniejsza i (b) gwarantuje, że wyrażenie jest rodzaju BYTE
, podczas gdy stała 255
jest typu int
.