蟒蛇C转换误差
问题描述:
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);
我得到错误和警告: 错误:整型常量是太大“长”型 警告:转换缺乏在格式末尾键入 警告:格式太多的参数
答
您的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));
}
}
答
尝试long long
。 Python会自动使用符合常量的数字表示,但C不会。 0x100000000L根本不适合32位unsigned int
,unsigned long
等。另外,请阅读您的C教科书long long
数据类型并使用它。
答
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" */
}
}
您在C代码中缺少一些花括号。 – 2011-04-17 17:36:06
对于长整型常量,使用'0x100000000L' – GWW 2011-04-17 17:37:07
你期望在这里输出什么?任何整数类型除以一个较大的值就会变为零。 – Random832 2011-04-17 18:29:44