C中的按位运算
问题描述:
这段代码编译得很好,但是当我尝试运行它时,它失败了。C中的按位运算
int main(int argc, char** argv) {
int c = 4;
int b = 5;
int a = a & b;
printf(a);
return (EXIT_SUCCESS);
}
我在做什么错?
答
printf
的第一个参数是格式字符串,char*
。有关构造格式字符串的更多信息,请阅读this。
printf(a);
应该是:
printf("%d", a);
否则a
将作为字符串的开头的地址进行处理,当它的间接引用导致未定义的行为(有它会崩溃的好机会)。
此外,我假设上述代码不是您正在讨论的确切代码,因为它不会按原样编译。
答
printf
需要char *, ...
而不是int
。我觉得你的代码应该是:
printf("%d", a);
而且,你的函数名,test
和func
,不匹配。但我不认为这是问题:)
答
不知道你到底想做什么,你的程序实际上会失败(编译和运行时)。
- 没有头文件,所以
return (EXIT_SUCCESS);
会给编译错误。 -
printf(a);
是错误的,没有格式说明符。实际上应该是printf("%d",a);
- 没有前向声明
int func(int x)
。 - 最后看来你想叫
func
但最终调用test
你不定义'test'功能,或者你不叫'func'。 –
“它失败”非常模糊。它在做什么?你期望它做什么? – abelenky
除了已经提到的所有其他的东西,如果'func()'应该检查'x'是否是2的幂,那么你需要检查'x'的负值以便捕获它是'INT_MIN'。 –