免费注册 查看新帖 |

Chinaunix

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

新手请教一个printf的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-25 12:01 |只看该作者 |倒序浏览
代码如下:

int main()
{
    char a = 0x7f;
    char b = 0xf7;

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

结果:
a=7f, b=fffffff7

如果定义a,b都为unsigned char类型,则:
a=7f, b=f7

    这个问题应该和正负数有关吧?但是我不明白是什么原因造成的,
请各位指教,谢谢

论坛徽章:
0
2 [报告]
发表于 2008-01-25 12:38 |只看该作者
参数传递的时候会被符号扩展

论坛徽章:
0
3 [报告]
发表于 2008-01-25 12:39 |只看该作者
它们都用8位表示
char 有符号 整数范围为-128到127( 0x80__0x7F),  f7超过范围成为负数
unsigned char 无符号 整数范围为0到255( 0__0xFF ) f7在范围内

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2008-01-25 12:57 |只看该作者
16进制     2 进制           10进制
--------------------------------------------
0x7f          1111111              127
0xf7          11110111            247
char 有符号 整数范围为-128到127
Variables of type char are generally used to hold values defined by the ASCII character set. Values outside that range may be handled differently by different compilers.

[ 本帖最后由 FinalBSD 于 2008-1-25 13:05 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-01-25 14:12 |只看该作者
我查了一下man,里面对于%x的描述提及:

o,u,x,X
              The unsigned int argument is converted to  unsigned  octal  (o),
              unsigned  decimal  (u),  or unsigned hexadecimal (x and X) nota-
              tion.

    也就是说本身x的类型就应该是unsigned的,代码中赋予signed的参数,超越
x的范围,所以对于不同的编译器,就出现不同的结果。
    Is it right?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP