12

unsigned short和有什么区别unsigned int?我发现那unsigned short0-65,535unsigned int0-65,5350-4,294,967,295。我不太了解其中的区别。如何知道架构中数据类型的大小?如果例如c = (unsigned short) d;whenc是 anunsigned short并且 d 是 an unsigned int; 那什么意识?的前 16 位d分配给c?

4

4 回答 4

6

short您真的在问和之间有什么区别int。答案是short可能更窄,但也可能与 相同宽度int。这几乎就是我们所知道的一切,与平台无关。很多平台都有 32-bitint和 16-bit short,但不是全部。

于 2013-03-17T01:39:12.803 回答
2

这是解释 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 的实现详细信息,其中 int 大小为 32 位(4 个字节),short 大小为 16 位(2 个字节):

http://msdn.microsoft.com/en-us/library/s3f49ktz(v=vs.80).aspx

您的确切实现将取决于您的编译器。

至于问题的最后一部分,是的,如果您尝试将大于 short 最大值的 int 转换为 short ,那么您最终会得到一个不同的值(可能是前 16 位,但您应该进行测试以确保) .

于 2013-03-17T01:42:32.187 回答
0

我们不能说变量类型名称(short、int、long、double 等)必须指向所有微处理器架构或编程语言中的特定位长度。它主要取决于微处理器的体系结构,当然还有编程语言的定义。一般来说,有符号/无符号短应该(我希望)有符号/无符号整数的一半位大小。

于 2013-03-17T01:57:15.957 回答
-1

首先,您必须了解 unsigned int 和 short 是什么。

一切都被分解成碎片。

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。

现在一个 short 有 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
于 2013-03-17T01:47:55.140 回答