這裏是我的代碼獲得了POW()函數的兩個不同的結果,在兩個不同的Linux操作系統
#include<stdio.h>
#include<math.h>
void main(void)
{
printf("pow as double: %lf\n\r", pow(2,32));
printf("pow as long int: %ld\n\r", ((long int)pow(2,32)));
}
我編制了2個不同的Linux操作系統的代碼。 (GCC powfn.c -o powfn)
在VirtualBox的Ubuntu中,我得到了以下結果
pow as double: 4294967296.000000
pow as long int: 4294967296
在Debian GNU/Linux的8 OS上的Znyq的ARM Cortex A9處理器上運行,我得到了以下結果
pow as double: 4294967296.000000
pow as long int: 2147483647
這是怎麼回事?爲什麼這兩個不同的結果?
嘗試檢查'long int類型的大小'在兩臺機器上。 – taras
看起來你在ARM上的long int實際上是一個32位整數。 – steppo
是的。 ARM上的long int是4字節,而在VirtualBox Ubuntu上是8字節 – KharoBangdo