//一种获取无符号整数最大值的方法: procedure TForm1.Button1Click(Sender: TObject); var {Delphi 标准的无符号整数类型只有三种} num_Byte : Byte; num_Word : Word; num_Cardinal : Cardinal; {Windows API 中相应的类型就太多了, 下面是随便找了几种} api_UCHAR : UCHAR; {Byte} api_LANGID : LANGID; {Word} api_DWORD : DWORD; {Cardinal} api_LongWord : LongWord; {Cardinal} api_UINT : UINT; {Cardinal} api_THandle : THandle; {Cardinal} api_HWND : HWND; {Cardinal} begin num_Byte := Byte(-1); ShowMessage(IntToStr(num_Byte)); {255} num_Word := Word(-1); ShowMessage(IntToStr(num_Word)); {65535} num_Cardinal := Cardinal(-1); ShowMessage(IntToStr(num_Cardinal)); {4294967295} api_UCHAR := UCHAR(-1); ShowMessage(IntToStr(api_UCHAR)); {255} api_LANGID := LANGID(-1); ShowMessage(IntToStr(api_LANGID)); {65535} api_DWORD := DWORD(-1); ShowMessage(IntToStr(api_DWORD)); {4294967295} api_LongWord := LongWord(-1); ShowMessage(IntToStr(api_LongWord)); {4294967295} api_UINT := UINT(-1); ShowMessage(IntToStr(api_UINT)); {4294967295} api_THandle := THandle(-1); ShowMessage(IntToStr(api_THandle)); {4294967295} api_HWND := HWND(-1); ShowMessage(IntToStr(api_HWND)); {4294967295} end;
简单分析:
譬如 Word 是两字节 16 位的,
它最大值的二进制表示是: 11111111 11111111;
假如它能表示 -1, 负数的算法是: 反码 + 1:
1 的二进制是: 00000000 00000001;
1 的反码是 : 11111111 11111110
补 1 后是 : 11111111 11111111
Word 没有负数, 当然 11111111 11111111 就是它的最大值了.