免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1762 | 回复: 7

[C] 这道题输出是多少 [复制链接]

论坛徽章:
2
操作系统版块每日发帖之星
日期:2015-06-04 16:12:38操作系统版块每日发帖之星
日期:2015-06-04 22:20:00
发表于 2015-10-07 18:10 |显示全部楼层
如题,
     int x = 0x99, y = 0;
       memset((void *)&y, ((x & 0x0f) < 0x0a ? x & 0x0f : 0  +  (x&0xf0)<0xa0?x&0xf0:0),1);
        printf("%x",y);
我在VS上跑了一下,输出9,但我不理解是怎么来的,请大家指点下

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2015-10-07 20:58 |显示全部楼层
回复 1# borntofight


    1. 不了解 memset 的意思?查它的文档;
2. 不了解 memset 第二个参数取什么值?查查 ?: 等操作符的优先级和结合性。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2015-10-07 21:10 |显示全部楼层
补充:
3、字节序

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
发表于 2015-10-07 22:39 |显示全部楼层
回复 3# hellioncu


    然而用C语言的地方基本排除大端

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
发表于 2015-10-08 08:24 |显示全部楼层
提问时,应当剔除无关的代码,你应该这么问
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main( void )
  4. {
  5.     int y = 0;
  6.     memset( &y, 9, 1 );
  7.     printf("%x",y);
  8. }
复制代码
为什么输出9?

甚至也该剔除掉memset,直接这么问:
int y = 0;
将 y 的第一个存储字节改为9时,为什么y的值变为了9?

论坛徽章:
1
2015亚冠之阿尔艾因
日期:2015-08-24 15:46:57
发表于 2015-10-08 09:25 |显示全部楼层
int y = 0;
*((char *)&y) = 9;
printf("%x", y);



论坛徽章:
2
操作系统版块每日发帖之星
日期:2015-06-04 16:12:38操作系统版块每日发帖之星
日期:2015-06-04 22:20:00
发表于 2015-10-08 09:58 |显示全部楼层
谢谢大家,这道题主要还是考运算符优先级,是我弄错了,我把第二部分算成0x99了,应该是9

论坛徽章:
1
2015亚冠之阿尔艾因
日期:2015-08-24 15:46:57
发表于 2015-10-08 10:56 |显示全部楼层
本帖最后由 何必抱怨 于 2015-10-08 10:56 编辑

给第一个回复给跪了。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP