unsigned short
和有什么区别unsigned int
?我发现那unsigned short
是0-65,535
和unsigned int
是0-65,535
或0-4,294,967,295
。我不太了解其中的区别。如何知道架构中数据类型的大小?如果例如c = (unsigned short) d;
whenc
是 anunsigned short
并且 d 是 an unsigned int
; 那什么意识?的前 16 位d
分配给c
?
4 回答
short
您真的在问和之间有什么区别int
。答案是short
可能更窄,但也可能与 相同宽度int
。这几乎就是我们所知道的一切,与平台无关。很多平台都有 32-bitint
和 16-bit short
,但不是全部。
这是解释 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 位,但您应该进行测试以确保) .
我们不能说变量类型名称(short、int、long、double 等)必须指向所有微处理器架构或编程语言中的特定位长度。它主要取决于微处理器的体系结构,当然还有编程语言的定义。一般来说,有符号/无符号短应该(我希望)有符号/无符号整数的一半位大小。
首先,您必须了解 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