免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4230 | 回复: 7
打印 上一主题 下一主题

16进制打印的一个小问题请教大家 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-22 21:21 |只看该作者 |倒序浏览
#include <stdio.h>

int main()
{
    char a;

    a = 128;

    printf("%x\n", a);
    return 0;
}

在GCC下编译运行结果为ffffff80,后面的80可以理解,为什么前面一串f,谢谢大家了!

论坛徽章:
0
2 [报告]
发表于 2010-03-22 21:25 |只看该作者
signed?

论坛徽章:
0
3 [报告]
发表于 2010-03-22 21:39 |只看该作者
我猜是面试题

论坛徽章:
0
4 [报告]
发表于 2010-03-22 23:17 |只看该作者
回复 1# zhangyong307189


    这个问题没什么意思,和你运行的平台有关系,在一些平台能打印出“80”来,在An Introduction to GCC - for the GNU compilers gcc and g++ 中有一段说明了,“  Most systems, including x86 GNU/Linux and Microsoft Windows, use signed char, but those based on PowerPC and ARM processors typically use unsigned char.(29) This can lead to unexpected results when porting programs between platforms which have different defaults for the type of char.  “ 并且在C标准中也没有定义char是 unsigned char或者是 signed char,
   不过在x86 gcc上默认的是 signed char(-128--127).
    不过本题赋值128会造成溢出,gcc会用一个int型来存储成为-128.而-128在内存中存储的是它的补码形式,128 源码0000,0000, 0000,0000, 0000,0000 ,1000,0000  
反码 1111,1111,  1111,1111  ,1111,1111,  0111,1111 加1 成为 1111,1111,  1111,1111,   1111,1111,  1000,0000  (补码)  也就是16进制的 FFFF FF80.
如果用的是GCC 在编译时加上 -funsigned-char  那结果就是80了.
  1. yang23@yang23-laptop:~/tmp$ gcc tmp.c -funsigned-char
  2. yang23@yang23-laptop:~/tmp$ ./a.out
  3. 80
  4. yang23@yang23-laptop:~/tmp$ gcc tmp.c -fsigned-char
  5. yang23@yang23-laptop:~/tmp$ ./a.out
  6. ffffff80
  7. yang23@yang23-laptop:~/tmp$
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-03-22 23:36 |只看该作者
回复 4# yang23

professional!

一旦溢出,打印出什么都是不奇怪的  

论坛徽章:
0
6 [报告]
发表于 2010-03-22 23:51 |只看该作者
回复 5# doofy


    这里说溢出应该不恰当,不会像内存越界那样出现一些匪夷所思的数据。

论坛徽章:
0
7 [报告]
发表于 2010-03-23 00:02 |只看该作者
回复 4# yang23


    学习了,多谢:)

论坛徽章:
0
8 [报告]
发表于 2010-03-23 00:41 |只看该作者
回复 6# yang23

按照我的理解,将一个数值赋给超过其表示范围的变量就算溢出,溢出后的结果可能与平台相关了... 当然这里肯定不会像内存溢出那样乱套
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP