首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面试问题

面试问题
EN

Stack Overflow用户
提问于 2010-11-25 01:44:33
回答 7查看 8.3K关注 0票数 39

在昨天的面试中,我被问到以下代码的输出

代码语言:javascript
复制
#include <stdio.h>
int main(void){
       printf ("%x" ,-1<<4); 
}

我有2分钟的时间说出答案。我回复了fffffff0。面试结果还没有公布。我想知道我的答案正确吗?

EN

回答 7

Stack Overflow用户

发布于 2010-11-25 01:48:19

不是的。你说的不对。这是个坏消息。好消息是,面试官可能不知道这一点,并会假设你知道,因为这是他们编译和运行它时得到的结果。

真正的答案是它是由实现定义的。由于过载,我不能百分之百肯定地说它是未定义的行为,但我认为它可能是。尽管结果至少取决于负数的表示方式,等等。您所声明的语言都不在定义输出内容中。

票数 11
EN

Stack Overflow用户

发布于 2010-11-25 01:49:50

在我的机器上:

代码语言:javascript
复制
chris@zack:~$ cat > test.c
#include <stdio.h>
int main(void){
       printf ("%x" ,-1<<4);
}

chris@zack:~$ gcc -o test test.c && ./test
fffffff0

但是,结果将取决于您的体系结构和编译器。所以正确的答案是“它可以输出任何东西”。

票数 9
EN

Stack Overflow用户

发布于 2010-12-25 02:41:17

代码语言:javascript
复制
Binary of 1  : 0000 0000 0000 0000 0000 0000 0000 00001

将出现的0替换为1,因为您将计算负no的二进制

How to calculate binary of negative numbers

代码语言:javascript
复制
Binary of -1 : 1111 1111 1111 1111 1111 1111 1111 11111

Left shift 4 : 1111 1111 1111 1111 1111 1111 1111 0000

结果左移位4的十六进制表示将是

代码语言:javascript
复制
1111 : F 

0000 : 0

因此,计算出的输出将是:

代码语言:javascript
复制
FFFFFFF0

你的答案是对的。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4269838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档