谁能告诉我数据类型的范围是如何计算的?例如,在MySQL或PostgreSQL中,我们有smallint,integer和bigint,smallint的范围是-32768或+32767。这些范围是如何计算的?
ruyhziif1#
您的数据类型是int,表示为2字节类型。2 bytes表示其二进制表示中的2 x 8 = 16位。此外,您的示例数据类型是 signed -这意味着最高位将用作符号(0用于正数,1用于负数)。从数学上知道,对于二进制值,您可以保存2^n唯一值,即对于您的16-1位,将有15个可用位。所以这将是-(2^n) .. 2^n-1范围,其中n=15。当你计算-(2^15)和2^15 - 1时,你会得到-32768和32767。就这样
int
2 bytes
2 x 8 = 16
0
1
2^n
16-1
-(2^n) .. 2^n-1
n=15
-(2^15)
2^15 - 1
-32768
32767
r7xajy2e2#
查看文档中的此页http://www.postgresql.org/docs/9.2/static/datatype-numeric.html数字基于数据二进制宽度01111111111111 ~ 32767,10000000000000 ~ -32768你可以找到很多文档:搜索“补码格式算术数字”
2条答案
按热度按时间ruyhziif1#
您的数据类型是
int
,表示为2字节类型。2 bytes
表示其二进制表示中的2 x 8 = 16
位。此外,您的示例数据类型是 signed -这意味着最高位将用作符号(0
用于正数,1
用于负数)。从数学上知道,对于二进制值,您可以保存
2^n
唯一值,即对于您的16-1
位,将有15个可用位。所以这将是-(2^n) .. 2^n-1
范围,其中n=15
。当你计算-(2^15)
和2^15 - 1
时,你会得到-32768
和32767
。就这样r7xajy2e2#
查看文档中的此页
http://www.postgresql.org/docs/9.2/static/datatype-numeric.html
数字基于数据二进制宽度01111111111111 ~ 32767,10000000000000 ~ -32768
你可以找到很多文档:搜索“补码格式算术数字”