unsigned short
和unsigned int
之间的区别是什么?我发现unsigned short
为0-65,535
而unsigned int
为0-65,535
或0-4,294,967,295
。我不太了解这种差异。如何知道架构中数据类型的大小?如果例如c = (unsigned short) d;
c
是unsigned short
而d是unsigned int
;那什么意识? d
的前16位分配给c
?
答案 0 :(得分:6)
您真的在问short
和int
之间的区别。答案是short
可能更窄,但也可能与int
的宽度相同。这几乎是我们所知道的,独立于平台。很多平台都有32位int
和16位short
,但不是全部。
答案 1 :(得分:1)
这是解释C数据类型历史的有用链接:
http://en.wikipedia.org/wiki/C_data_types
因此,您的数据类型的大小取决于平台,但如果您的int长度为32位,则它将能够表示2 ^ 32个不同数字中的一个(如果未签名则为0 - 4,294,967,295)。类似地,如果你的short是16位长度,那么它可以代表2 ^ 16个不同数字中的一个(如果是无符号则为0到65,535)。
此链接为您提供Visual Studio 2005的实现详细信息,其中整数为32位(4字节),短路为16位(2字节):
http://msdn.microsoft.com/en-us/library/s3f49ktz(v=vs.80).aspx
您的确切实施将取决于您的编译器。
至于你问题的最后一部分,是的,如果你试图将一个大于short的最大值的int转换为short,那么你将得到一个不同的值(可能是前16位,但你应该测试到确定)。
答案 2 :(得分:0)
我们不能说变量类型名称(short,int,long,double等)必须指向所有微处理器体系结构或编程语言的特定位长度。它主要依赖于微处理器的架构,当然也取决于编程语言的定义。通常,有符号/无符号短路应该(我希望)有一半的有符号/无符号整数。
答案 3 :(得分:-1)
首先,你必须了解unsigned int和short是什么。
一切都被分解成了一些。
短路为16位,每位为1或0.为简单起见,我将演示4位
1000 - Unsigned = 8
1000 - Signed = -8
1111 - Unsigned = 15 which is equal to 2^(# of bits) -1
1111 - Signed = -1
请注意,对于无符号数字,我们可以使用更大的数字范围 1111 = 15。
但是有了签名号码,最大可能性是 0111 = 7。
现在短路有16位,给它
signed range of −32,768 to 32,767 [−(2^15) to 2^15 − 1]
Unsigned range: 0 to 65,53 = 2^16 -1
Int有32位,给出范围
Signed:−2,147,483,648 to 2,147,483,647 = −(2^31) to 2^31 − 1
Unsigned: 0 to 4,294,967,295 = 2^16 -1