Re: [問題] 關於printf的兩個問題
※ 引述《SPower (xx)》之銘言:
: // 環境: WinXP
: // compiler: GNU C++ Compiler
: // 問題一
: #include <cstdio>
: #include <iostream>
: using namespace std;
: int main(int argc, char *argv[])
: {
: long long int n = 1;
: for(int i=1;i<63;i++)
: printf("2^%d = %lld\n",i,n*=2); //這裡只能印出到2^31
: //就overflow了
long long 這個東西,直到 C99 才有正式納入標準,C89 及
目前的 C++ 標準,並沒有此物。但是各家編譯器早就各行其是,
用不同方式去支援 long long 的使用。
雖然用的是 gcc, 但因為是在 Win 底下編譯並連結到 Windows
系統提供的 C library,它要用 printf 印 long long 時,
不是用 %lld 而是用 %I64d
註:若是用 cygwin 的話,它預設是 link 其自身提供的 C library
所以仍用 %lld。但若不用預設,而在編譯連結時指定 -mno-cygwin
那就又連到 Windows C lib 了。
: n = 1;
: for(int i=1;i<63;i++) { //這裡卻沒有問題 why?
: n*=2;
: cout<<"2^"<<i<<" = "<<n<<endl;
C++ 的 iostream 聰明又安全,不用去指定輸出的 type
將實作細節 encapsulate 了。
: }
: return 0;
: }
: 請問一下為什麼printf 會造成降子的情況呢?
: =================================================================
: 問題二: 關於printf 印出 long long int 應該是用 %lld 沒錯吧?
: 不過有下面的問題
: #include <cstdio>
: int main(int argc, char *argv[])
: {
: long long int x = 3, y = 4;
: printf("%lld %lld",x,y); //會印出x=3 y=0 不是各8bytes嗎?
: ^^^^
解法同上。
: return 0; //怎麼y被x吃掉了? (抱歉我不知道該怎麼講)
: }
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.208.168
推
61.70.137.117 07/11, , 1F
61.70.137.117 07/11, 1F
→
61.70.137.117 07/11, , 2F
61.70.137.117 07/11, 2F
推
163.13.128.240 07/12, , 3F
163.13.128.240 07/12, 3F
推
61.222.148.171 07/12, , 4F
61.222.148.171 07/12, 4F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
-4
30