c語言的有些庫函數會在編譯的時候被最佳化
如gcc中
log2(1)會被最佳化成常數
但是log2(20)就會在運行時計算值
fabs會被最佳化成機器(彙編)指令fabs
所以即使你沒有包含含有fabs聲明的標頭檔也可以成功編譯運行
帶有fabs函數的程式
.....................................................................
(int&)a和*((int*)&a)是一樣的
把&a這個地址上32位元看作int型
..................................................................
C語言標準提供了一種資料類型long long
目前的平台上 long long是8位元組的64位整數
表示的數範圍是[-2^63, 2^63-1]
那麼如何輸入輸出這個類型的資料呢
long long test;
scanf("%lld",&test);
printf("%lld",test);
在gcc4+Linux(2.6.15)下面,這樣的輸入輸出是沒有問題的
但是在Windows下面
一些老的編譯器,這樣的代碼是沒法正確工作的
原因是C-Runtime-Library不支援這個參數
在XP+DevC++4.9下面
這個得變成windows的特殊方式指定類型
%lld得用%I64d替換
---------------------------------------------------------------
怎樣讀取一個double的全部記憶體資料
typedef union
{
double value;
struct
{
unsigned int lsw;
unsigned int msw;
} parts;
} ieee_double_shape_type;
/* Get two 32 bit ints from a double. */
#define EXTRACT_WORDS(ix0,ix1,d)
do {
ieee_double_shape_type ew_u;
ew_u.value = (d);
(ix0) = ew_u.parts.msw;
(ix1) = ew_u.parts.lsw;
} while (0)
怎樣輸出一個完整的浮點數
double d1;
char str1[64];
d1=0.681638760023334166733241952779893935; //36
dtoa(str1, d1, 40);
printf(" d1 = %s \r\n",str1);
---------------------------------------------------------------