在昨天的面试中,我被问到以下代码的输出
#include <stdio.h>
int main(void){
printf ("%x" ,-1<<4);
}我有2分钟的时间说出答案。我回复了fffffff0。面试结果还没有公布。我想知道我的答案正确吗?
发布于 2010-11-25 01:48:19
不是的。你说的不对。这是个坏消息。好消息是,面试官可能不知道这一点,并会假设你知道,因为这是他们编译和运行它时得到的结果。
真正的答案是它是由实现定义的。由于过载,我不能百分之百肯定地说它是未定义的行为,但我认为它可能是。尽管结果至少取决于负数的表示方式,等等。您所声明的语言都不在定义输出内容中。
发布于 2010-11-25 01:49:50
在我的机器上:
chris@zack:~$ cat > test.c
#include <stdio.h>
int main(void){
printf ("%x" ,-1<<4);
}
chris@zack:~$ gcc -o test test.c && ./test
fffffff0但是,结果将取决于您的体系结构和编译器。所以正确的答案是“它可以输出任何东西”。
发布于 2010-12-25 02:41:17
Binary of 1 : 0000 0000 0000 0000 0000 0000 0000 00001将出现的0替换为1,因为您将计算负no的二进制
How to calculate binary of negative numbers
Binary of -1 : 1111 1111 1111 1111 1111 1111 1111 11111
Left shift 4 : 1111 1111 1111 1111 1111 1111 1111 0000结果左移位4的十六进制表示将是
1111 : F
0000 : 0因此,计算出的输出将是:
FFFFFFF0你的答案是对的。
https://stackoverflow.com/questions/4269838
复制相似问题