这可能是一个愚蠢的问题,如果是这样,我深表歉意。
我最近读了一篇关于将身份设置为 IDENTITY(-2147483647,1) 的文章,以便在使用 INT 数据类型时获得全部 40 亿行,这对我来说感觉很奇怪。
我很好奇为什么没有一个与 INT 大小相同但保存 0 - 4,294,967,294 行的数据类型。
最佳答案
这是有符号长整型和无符号长整型之间的区别。无符号长整数将存储 00000000 00000000 00000000 00000000 和 11111111 11111111 11111111 11111111 或 0 到 4294967295 之间的值,这就是你的直觉告诉它应该的值。
相反,这是一个带符号的长整型,它使用最左边的位作为符号。 0 为正,1 为负。因此,您存储的值介于 10000000 00000000 00000000 00000000 和 01111111 11111111 11111111 11111111 或 -2147483647 到 2147483647 之间。
这里关于无符号长整数如何存储负数(使用 2 的补码)有一些细微差别。您可以在这里阅读更多相关信息http://kias.dyndns.org/comath/13.html
至于为什么微软决定使用有符号整数而不是无符号整数,你可以在问题的评论中查看@alroc的链接,尽管它并不是很有启发性,因为它基本上可以归结为“这很复杂,我们很酷”它与它,所以就是这样。振作起来。”
关于sql - 为什么没有 0 - 4,294,967,294 的数字数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26636734/