免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 姚世友
打印 上一主题 下一主题

[C] 考考大家的C语言基础  关闭 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2015-08-03 06:20:00
51 [报告]
发表于 2008-12-19 13:36 |只看该作者
我感觉应该是考 计算机原理的基础吧

论坛徽章:
0
52 [报告]
发表于 2008-12-19 14:02 |只看该作者
搞php的飘过,基础差,看不懂!!~~~

论坛徽章:
0
53 [报告]
发表于 2008-12-19 14:39 |只看该作者
原帖由 姚世友 于 2008-12-17 21:51 发表
#include
#include
#include

int main(int argc, char** argv)
{
    union
    {
          struct  
          {
              char a:1;         
              char b:2;         
    ...

伪题!
在x86上面输出-1
其他sparc, itanium,HP-parisc平台都是输出0!!!!!!!

这个题目的答案是和平台相关的。。。 。。。

x86不能代表一切!!!!!!!

论坛徽章:
0
54 [报告]
发表于 2008-12-19 14:51 |只看该作者
这东西不实用,移植性不好。
基本上和“‘茴香豆’的‘茴’字有几种写法?”属于一类问题

论坛徽章:
0
55 [报告]
发表于 2008-12-19 16:52 |只看该作者
题目存在比特序的问题哦。

论坛徽章:
0
56 [报告]
发表于 2008-12-19 17:42 |只看该作者
回去翻翻书

论坛徽章:
0
57 [报告]
发表于 2008-12-20 00:26 |只看该作者
原帖由 huxk 于 2008-12-19 11:26 发表
有些知识是你知道或者不知道,这属于记忆范畴,可以通过查阅文档解决


有些知识是你怎么想得到,这属于思考范畴,需要长期培养,非一日之功

这个题目,两者都有吗

论坛徽章:
0
58 [报告]
发表于 2008-12-20 00:29 |只看该作者
答案前面的兄弟已经给了很好的解答。

这种涉及位域的题目,一直是很多c程序员面试的必考题,属于基础。这道题是典型。我们先不说不同系统关于字节序的争议。很多人知道位域,但他不一定能了解想到类型转换,想到了类型转换,却不一定能想到补码。这道题考的不仅仅是一个知识点。所以说他是经典题目。在很多公司,你会经常看到这类题目。

是否你写的代码是完美的?代码之美里关于二叉树算法那章,我记得大师举个例子,一个简简单单的搜索算法,很多程序员写了很多年还会出现溢出的问题。在你开发的系统中,也许某个你不注重的细节就会成为致命的地雷,让基于你的核心代码之上二次开发的同事手足无措,所以,不要去藐视基础题,尊重细节,尊重基础,是一个优秀的程序员必备的心态。

论坛徽章:
0
59 [报告]
发表于 2008-12-20 00:57 |只看该作者
有点深奥,还是要多学习学习

论坛徽章:
0
60 [报告]
发表于 2008-12-20 13:41 |只看该作者
原帖由 姚世友 于 2008-12-17 21:51 发表
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv)
{
    union
    {
          struct  
          {
              char a:1;         
              char b:2;         
              char c:3;        
          }d;
        char e;
    } f;
   
    f.e = 1;
    printf("%d\n",f.d.a);   
    getchar();
    return 0;
}     


以上结果只在x86上,因为和字节顺有关
由于f.d.a总共只占一位,也就是要么为0,要么为1,但因为它是有符号的,所以在这里就是-1了,如果改成为无符号的,则输出1,和e是否有符号没有关系。
即使改成:
int main(int argc, char** argv)
{
    union
    {
          struct  
          {
              char a:1;         
              char b:2;         
              char c:3;        
          }d;
        char e;
    } f;
   
    f.d.a = 1;
    printf("%d\n",f.d.a);   
    getchar();
    return 0;
}     
输出仍是-1或1(也与字节顺有关)

______________________
处理器    操作系统    字节排序
Alpha    全部    Little endian
HP-PA    NT    Little endian
HP-PA    UNIX    Big endian
Intelx86    全部    Little endian <-----x86系统是小端字节序系统
Motorola680x()    全部    Big endian
MIPS    NT    Little endian
MIPS    UNIX    Big endian
PowerPC    NT    Little endian
PowerPC    非NT    Big endian  <-----PPC系统是大端字节序系统
RS/6000    UNIX    Big endian
SPARC    UNIX    Big endian
IXP1200 ARM核心    全部    Little endian

[ 本帖最后由 Aquester 于 2008-12-20 13:49 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP