今天早上的企鹅公司的实习笔试题。大家来讨论下!

ccc43542876 2013-04-13 03:21:39
第一题:signed char a=0xe0;

unsigned int b=a;

unsigned char c=a;

下面说法正确的是:

A (a>0 )&&(b>0)为真 B c==a 为真 C b的16进制为0xffffffe0 D 都不对



第二题:int main()
{
long long a=1;
long long b=2;
long long c=3;
printf("%d,%d,%d",a,b ,c);
return 0;

}
输出结果是什么?(32位环境,cpu为小端模式,所有参数用栈传递)


第三题:unsigned int a= 0x1234;
unsigned char b=*(unsigned char *)&a;
在32位大端模式处理器上变量b= ?。



希望大家给出详细点的分析。。分析好的我都会给分的。。希望大家多讨论!!
...全文
2759 56 打赏 收藏 转发到动态 举报
写回复
用AI写文章
56 条回复
切换为时间正序
请发表友善的回复…
发表回复
DaiwjDev 2013-05-29
  • 打赏
  • 举报
回复
好贴,mark
iHippie 2013-05-04
  • 打赏
  • 举报
回复
第三题,怎么我在C程序里敲出来运行结果是4??
anjie4402211 2013-04-22
  • 打赏
  • 举报
回复
引用 36 楼 youyou1912 的回复:
引用 35 楼 shimachao 的回复:引用 33 楼 youyou1912 的回复:第一题:signed char a=0xe0; unsigned int b=a; unsigned char c=a; 下面说法正确的是: A (a>0 )&&(b>0)为真 B c==a 为真 C b的16进制为0x……
我看了cdecl调用那篇文章, 理解到就是 printf如果参数的format大小(如%d是4)与参数的实际(如long是8)不同时,那打印会出错。不知这样理解对不对? 但测了一下, char a=1,b=2,c=3; printf("sizeof(long):%d a:%d b:%d c:%d\n",sizeof(long),a,b,c); 打印出来是对的 (64位小端环境) sizeof(long):8 a:1 b:2 c:3 所以 感觉好像是像35楼所说的那样?
xl5517579 2013-04-20
  • 打赏
  • 举报
回复
哎,话说我笔试也过了,但是因为隔得太远就没得去面试,LZ去面试了吗?面试场面怎么样?问的难不难啊?
懒先森要努力 2013-04-17
  • 打赏
  • 举报
回复
都是一些模棱两可的知识,看来好多基础没掌握啊,好好学习去。。
youyou1912 2013-04-16
  • 打赏
  • 举报
回复
引用 46 楼 ccc43542876 的回复:
引用 33 楼 youyou1912 的回复:第一题:signed char a=0xe0; unsigned int b=a; unsigned char c=a; 下面说法正确的是: A (a>0 )&&(b>0)为真 B c==a 为真 C b的16进制为0xffffffe0 D 都不对 【分析】: a = -1……
变参调用只能是__cdecl调用协定. 具体理解就是由format string来决定的, %d的意思就是double word, 4字节. 具体参考 http://blog.csdn.net/jiqiren007/article/details/6151640
ccc43542876 2013-04-16
  • 打赏
  • 举报
回复
多谢大神们的赐教,几道题特别是第二题现在很清楚了。。。结贴给分咯!
ccc43542876 2013-04-16
  • 打赏
  • 举报
回复
引用 49 楼 youyou1912 的回复:
引用 46 楼 ccc43542876 的回复:引用 33 楼 youyou1912 的回复:第一题:signed char a=0xe0; unsigned int b=a; unsigned char c=a; 下面说法正确的是: A (a>0 )&&(b>0)为真 B c==a 为真 C b的16进制为……
谢谢了哈。。
pp25210 2013-04-15
  • 打赏
  • 举报
回复
引用 14 楼 hello_yz 的回复:
LZ笔试的是什么岗位啊? 对C语言要求很高么?
技术类的都是这一份试卷
walker沃克 2013-04-15
  • 打赏
  • 举报
回复
。。。第二题在C++中不可能出现的,这让C++程序员好苦逼呀
Code_Talk 2013-04-15
  • 打赏
  • 举报
回复
引用 45 楼 xubo1210 的回复:
想说的是,面试的题目,实际项目中真的用不到,这种面试无异于现在的高考,体现不出个人的真实能力。 引用 44 楼 h_w_m 的回复:第一题,考C/C++语言数据转换基本功: signed char、unsigned char、signed int、unsigned int.... 强制转换的规则 第二题,考C语言最常用函数知识 输出格式化/变参/标准C函……
我不是很同意你的说法,基础要牢固,不管有多牛,能力多强,基础不牢固总是不能发展久远的,除非心思不在技术。 个人理解。
CCDDzclxy 2013-04-15
  • 打赏
  • 举报
回复
哎~~ 基础不牢啊...
孤独小剑 2013-04-15
  • 打赏
  • 举报
回复
引用 15 楼 a2659633 的回复:
引用 6 楼 qq120848369 的回复:1, 整形比较小于int的会扩宽的int再比较, 而有符号数扩宽填充符号位, 无符号数填充0, 导致扩宽后两个整形的二进制不再相等, 选择C. 2, 1)无论32/64, long long都是8字节整形, %d会将参数栈上的内存解释为4字节int, 所以会造成打印结果异常. 2)由于任何多字节变量都要做内存对齐,……
你的系统要是64位的就除了第一个不是乱码,从第二个起(包含)就都是乱码。 原因建议看一下printf函数实现。
ccc43542876 2013-04-15
  • 打赏
  • 举报
回复
引用 44 楼 h_w_m 的回复:
第一题,考C/C++语言数据转换基本功: signed char、unsigned char、signed int、unsigned int.... 强制转换的规则 第二题,考C语言最常用函数知识 输出格式化/变参/标准C函数调用协义 第三题,考大端/小端概念的理解: unsigned int x = 0x00001234; unsigned char ……
第一和第三应该对,,第二题有点难了
ccc43542876 2013-04-15
  • 打赏
  • 举报
回复
引用 33 楼 youyou1912 的回复:
第一题:signed char a=0xe0; unsigned int b=a; unsigned char c=a; 下面说法正确的是: A (a>0 )&&(b>0)为真 B c==a 为真 C b的16进制为0xffffffe0 D 都不对 【分析】: a = -16 c = 224 b = 0xffffffe0 (负数扩……
老实说第一题和第三题真的应该做出来!第二题确实对我来说太难了点。。晓得是右向左压栈,可是为什么是取4个bytes呢?这点我也不懂。。。忘老大给更详细通俗的解。这题把我弄懂了,我就100分都给你了
xubo1210 2013-04-15
  • 打赏
  • 举报
回复
想说的是,面试的题目,实际项目中真的用不到,这种面试无异于现在的高考,体现不出个人的真实能力。
引用 44 楼 h_w_m 的回复:
第一题,考C/C++语言数据转换基本功: signed char、unsigned char、signed int、unsigned int.... 强制转换的规则 第二题,考C语言最常用函数知识 输出格式化/变参/标准C函数调用协义 第三题,考大端/小端概念的理解: unsigned int x = 0x00001234; unsigned char ……
h_w_m 2013-04-15
  • 打赏
  • 举报
回复
第一题,考C/C++语言数据转换基本功: signed char、unsigned char、signed int、unsigned int.... 强制转换的规则 第二题,考C语言最常用函数知识 输出格式化/变参/标准C函数调用协义 第三题,考大端/小端概念的理解: unsigned int x = 0x00001234; unsigned char *p = (unsigned char)&x; if(*p==0x34) printf("小端");else printf("大端"); 都是些基本功夫, 基本的概念和规则,资深C/C++程序员都懂的,初学和浅尝者则可能三个都不会. 都懂未必有多牛,都不懂则可说明很不合格,至少也属于C语言不及格的,不过第一题有25%的机率蒙对的.
zhuben775 2013-04-15
  • 打赏
  • 举报
回复
引用 6 楼 qq120848369 的回复:
1, 整形比较小于int的会扩宽的int再比较, 而有符号数扩宽填充符号位, 无符号数填充0, 导致扩宽后两个整形的二进制不再相等, 选择C. 2, 1)无论32/64, long long都是8字节整形, %d会将参数栈上的内存解释为4字节int, 所以会造成打印结果异常. 2)由于任何多字节变量都要做内存对齐, 原则是自身长度与sizeof(int)间较小……
版主,我想问下,在实际应用中,这样的代码是在什么领域运用的?是改BUG还是会把这样的代码当成计算方式?只是想知道这样的面试题是真的会在实际中运用还是他们蛋疼
xubo1210 2013-04-15
  • 打赏
  • 举报
回复
基本正确,纠正下a=-32。
引用 33 楼 youyou1912 的回复:
第一题:signed char a=0xe0; unsigned int b=a; unsigned char c=a; 下面说法正确的是: A (a>0 )&&(b>0)为真 B c==a 为真 C b的16进制为0xffffffe0 D 都不对 【分析】: a = -16 c = 224 b = 0xffffffe0 (负数扩……
芳草天 2013-04-14
  • 打赏
  • 举报
回复
虽然工作几年了,我表示真心不会啊。 平时也不允许写这种代码,所以从没关心过这些细节。。
加载更多回复(36)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧