2011-04-17 151 views
0

Python代碼蟒蛇C轉換誤差

for b in range(4): 
    for c in range(4): 
     print myfunc(b/0x100000000, c*8) 

C代碼

unsigned int b,c; 
for(b=0;b<4;b++) 
    for(c=0;c<4; c++) 
    printf("%L\n", b/0x100000000); 
    printf("%L\n" , myfunc(b/0x100000000, c*8)); 

我收到一個錯誤說: 錯誤:整型常量是在兩個printf語句 「長」 式的過大在c代碼中。 'myfunc'函數返回一個long。 這可以通過定義'b'來解決。我試圖將'b'定義爲'long'和'unsigned long'但沒有幫助。 任何指針?


我的壞...這是問題的短版

unsigned int b; 
b = 1; 
printf("%L", b/0x100000000L); 

我得到錯誤和警告: 錯誤:整型常量是太大「長」型 警告:轉換缺乏在格式末尾鍵入 警告:格式太多的參數

+4

您在C代碼中缺少一些花括號。 – 2011-04-17 17:36:06

+1

對於長整型常量,使用'0x100000000L' – GWW 2011-04-17 17:37:07

+2

你期望在這裏輸出什麼?任何整數類型除以一個較大的值就會變爲零。 – Random832 2011-04-17 18:29:44

回答

3

您的C代碼需要大括號來創建Python通過縮進執行的範圍,因此它應該如下所示:

unsigned int b,c; 
for(b=0;b<4;b++) 
{ 
    for(c=0;c<4; c++) 
    { 
     printf("%L\n", b/0x100000000); 
     printf("%L\n" , myfunc(b/0x100000000, c*8)); 
    } 
} 
1

嘗試long long。 Python會自動使用符合常量的數字表示,但C不會。 0x100000000L根本不適合32位unsigned int,unsigned long等。另外,請閱讀您的C教科書long long數據類型並使用它。

0
unsigned int b,c; 
const unsigned long d = 0x100000000L; /* 33 bits may be too big for int */ 

for(b=0;b<4;b++) { 
    for(c=0;c<4; c++) { /* use braces and indent consistently */ 
     printf("%ud\n", b/d); /* "ud" to print Unsigned int in Decimal */ 
     printf("%ld\n", myfunc(b/d, c*8)); /* "l" is another modifier for "d" */ 
    } 
}