2011-04-17 163 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" */ 
    } 
}