minwindef.h中关于UNIT的定义
typedef unsigned intUINT;无符号整型(unsigned int):取值是 2^31 - 1,即:0~4294967295
就拿十进制的32767(以下的所有举例均拿这个数字来说事了)来说,它的二进制为:
0111 1111 1111 1111
对于无符号的整型32767来说,它的二进制的最高位称为数据位,即那个0就是数据位,数据位是要参与运算的,如果我们把0改成1,即16个1,它的十进制就是65535(就是2的15次方+2的14次方...一直加到2的0次方),这是不同于有符号整型的。
有无符号的根本原因可以说就是因为数据出现了溢出现象导致的。
无符号值可以避免误存负数,且扩大了表示范围。
如:
人 150 岁之内 unsigned tinyint 1 无符号值: 0 到 255。
龟 数百岁 unsigned smallint 2 无符号值: 0 到 65535。
恐龙化石 数千万年 unsigned int 4 无符号值: 0 到约 42.9 亿。
太阳 约 50 亿年 unsigned bigint 8 无符号值: 0 到约 10 的 19 次方。
在C, C++中不存在UINT这个关键字
UINT类型是unsigned int派生出来的
int是带符号的,表示范围是:-2147483648 到 2147483647
uint是不带符号整型,表示范围是0到42949 67295(2^32-1),即第一个数字不表示符号
在C#中,uint 是关键字
表示一种整型,该类型根据下表显示的大小和范围存储值
| 类型 | 范围 | 大小 | .NET Framework 类型 |
uint | 0 到 4,294,967,295(2的32次方减一) | 无符号 32 位整数 | System..::.UInt32 |
在MFC中的解释
在MFC中,Data Types关于UINT的解释:
UINT A 16-bit unsigned integer on Windows versions 3.0 and 3.1; a 32-bit unsigned integer on Win32.
int类型比较特殊,具体的字节数同机器字长和编译器有关。如果要保证移植性,尽量用__int16 __int32 __int64吧
__int16、__int32这种数据类型在所有平台下都分配相同的字节。所以在移植上不存在问题。
所谓的不可移植是指:在一个平台上编写的代码无法拿到另一个平台上运行时,不能达到期望的运行结果。
例如:在32为平台上(所谓32位平台是指通用寄存器的数据宽度是32)编写代码,int 类型分配4个字节,而在16位平台是则分配2个字节,那么在16位上编译出来的exe,其中是为int分配2字节,而在32位平台上运行时,会按照4个字节来解析,显然会出错误的。
而对于非int行,目前为止,所有的类型分配的字节数都是兼容的,即不同平台对于同一个类型分配相同的字节数。
下面是各个类型一览表,64位指的是cpu通用寄存器的数据宽度是64位的。
| 数据类型名称 | 字节数 | 别名 | 取值范围 |
int | * | signed,signed int | 由操作系统决定,即与操作系统的"字长"有关 |
unsigned int | * | unsigned | 由操作系统决定,即与操作系统的"字长"有关 |
__int8 | 1 | char,signed char | –128 到 127 |
__int16 | 2 | short,short int,signed short int | –32,768 到 32,767 |
__int32 | 4 | signed,signed int | –2,147,483,648 到 2,147,483,647 |
展开表格
| 类型标识符 | 类型说明 | 长度 (字节) | 范围 | 备注 |
char | 字符型 | 1 | -128 ~ 127 | -2~ (2-1) |
unsigned char | 无符字符型 | 1 | 0 ~ 255 | 0 ~ (2-1) |
short int | 短整型 | 2 | -32768 ~ 32767 | 2~ (2- 1) |
unsigned short int | 无符短整型 | 2 | 0 ~ 65535 | 0 ~ (2- 1) |
int | 整型 | 4 | -2147483648 ~ 2147483647 | -2~ (2- 1) |
展开表格