/ / co to znaczy (BYTE) -1 - c ++

co to znaczy (BYTE) -1 - c ++

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

http://ideone.com/DGTkwq


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.