2014-10-29 80 views
2

这可能是一个愚蠢的问题,如果是的话,我表示歉意。为什么没有数字数据类型为0 - 4,294,967,294

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

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

+6

这个问题似乎是脱离主题,因为它是[dba.stackexchange上这个问题](http://dba.stackexchange.com/a/78918/35474)的重复,我不能标记为这样的B/C两个问题是在不同的网站 – alroc 2014-10-29 17:20:16

回答

2

这是一个有符号的长整数和一个无符号的长整数的区别。无符号长整数将存储00000000000000000000000000000000和11111111111111111111111111111111或0到4294967295之间的值,这是你的直觉告诉它应该是什么。

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

这里有一些关于如何使用无符号long存储负数(使用2的恭维)的细微差别。您可以在这里阅读更多关于它的信息http://kias.dyndns.org/comath/13.html

至于为什么微软决定使用signed int而不是unsigned,您可以在Question的评论中查看@alroc的链接,虽然它不是非常明亮,因为它基本上没有到“这很复杂,我们很酷,所以它就是这样,降压。”

相关问题