为什么没有0 - 4,294,967,294的数值数据类型

时间:2014-10-29 17:15:31

标签: sql sql-server

这可能是一个愚蠢的问题,如果是这样,我道歉。

我最近在阅读一篇关于将您的身份设置为IDENTITY(-2147483647,1)的文章,以便在使用INT数据类型时获得所有40亿行,这对我来说非常奇怪。

我很好奇为什么没有与INT相同大小的数据类型但保留0 - 4,294,967,294行。

1 个答案:

答案 0 :(得分:2)

签名长整数和无符号长整数之间的区别。无符号长整数将存储介于00000000 00000000 00000000 00000000和11111111 11111111 11111111 11111111或0到4294967295之间的值,这是您的直觉所应该的。

相反,这是一个带符号的Long Integer,它使用符号最左边的位。 0表示正数,1表示负数。因此,您将值存储在10000000 00000000 00000000 00000000和01111111 11111111 11111111 11111111或-2147483647到2147483647之间。

这里有一些关于无符号长期存储负数的细微差别(使用2'恭维)。您可以在http://kias.dyndns.org/comath/13.html

了解更多相关信息

至于为什么微软决定使用签名的in而不是unsigned,你可以在问题的评论中查看@alroc的链接,虽然它并不是非常有启发性,因为它基本上归结为"它很复杂,我们用它来冷却它,所以它就是这样的。支持。"

相关问题