如何在C ++中只用8个字节存储1024位?

时间:2014-10-06 14:23:22

标签: c++ numeric-limits

我无法想象这里发生了什么。

我以字节为单位找到以下数据类型的大小:

char:1
int:4
float:4
double:8
long long int:8

Now long long int max size is 9223372036854775807
whereas double max size is 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000

什么!!!

Mr. double如何以8字节存储如此大的值???

3 个答案:

答案 0 :(得分:3)

  

我需要多少个十进制数来表示0到10之间的每个整数 100 - 1?

答案应该是显而易见的:100位数。

  

如果我只需要7位有效数字,我需要多少个十进制数来表示0到10 100 - 1之间的整数值?

您只需要9.每个数字都可以表示为ABCDEFG * 10 HI

double以大致相同的方式工作。

答案 1 :(得分:1)

double max的二进制表示形式为整数(!),如下所示:

11111111111111111111111111111111111111111111111111111
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000

最后有批次零(准确地说是1024个零)。在那之前,1024个零是53个领先的零。为什么53个?因为这是有效位的数量,您可以存储在double中。

重要的是,所有这些零实际上并不存储在double中。它们由指数暗示。只存储了53个(好的,只有52个;第一个也是格式暗示的。)

答案 2 :(得分:0)

幅度的上限由有效数的组合决定,有效数决定数字的精确度,它的 exponent 决定了它的大小。该表示类似于科学(n *(10 ** m))表示法,除了它在基数2中。

许多很多基本10个整数和分数在IEEE FP表示法中是不可表示的,这对新开发人员来说一直是问题的反复出现。