更新时间:2024-10-01 16:06
UINT类型,在WINDOWS API中有定义,它对应于32位无符号整数。
无符号整型(unsigned int):取值是 2^32 - 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 是关键字
表示一种整型,该类型根据下表显示的大小和范围存储值
在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位的。