#include <stdio.h>
int main() {
unsigned long long int num = 285212672; //FYI: fits in 29 bits
int normalInt = 5;
printf("My number is %d bytes wide and its value is %ul. A normal number is %d.\n", sizeof(num), num, normalInt);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
My number is 8 bytes wide and its value is 285212672l. A normal number is 0.
Run Code Online (Sandbox Code Playgroud)
我认为这个意想不到的结果是来自打印unsigned long long int.你怎么printf()了unsigned long long int?
编辑:在评论中进行了一些讨论后发现,由于在 C 中如何实现浮点数方面的知识运气好,我问了一些与我想问的不同的问题。
我想使用(使用)比我可以使用的整数大的整数unsigned long long(对我来说是 8 个字节),可能不会重复使用数组或 bigint 库。由于我long double是 16 字节,我认为只需切换类型就可以实现。结果表明,即使可以表示更大的整数,您也无法进行操作——这些更大的整数long double整数 - 不会丢失精度。所以不可能实现我想做的事情。实际上,正如评论中所述,这对我来说是不可能的。但总的来说,是否可能取决于您的long double.
// end of EDIT
Run Code Online (Sandbox Code Playgroud)
我试图了解我可以存储在long double.
我知道这取决于程序内置的环境,但我不知道具体如何。我有一个sizeof(long double) == 16值得的。
现在在这个答案中,他们说 64 位双精度的最大值应该是 2^53,大约是 9 x 10^15,正好是9007199254740992.
当我运行以下程序时,它可以正常工作:
#include <stdio.h>
int main() {
long double d = 9007199254740992.0L, i;
printf("%Lf\n", d);
for(i = -3.0; i < 4.0; i++) {
printf("%.Lf) %.1Lf\n", i, d+i);
}
return 0;
} …Run Code Online (Sandbox Code Playgroud)