unsigned short vs unsigned int - 有时它们是相同的范围?

时间:2013-03-17 01:35:01

标签: c types int short

unsigned shortunsigned int之间的区别是什么?我发现unsigned short0-65,535unsigned int0-65,5350-4,294,967,295。我不太了解这种差异。如何知道架构中数据类型的大小?如果例如c = (unsigned short) d; cunsigned short而d是unsigned int;那什么意识? d的前16位分配给c

4 个答案:

答案 0 :(得分:6)

您真的在问shortint之间的区别。答案是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