免费注册 查看新帖 |

Chinaunix

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

这个加运算怎么理解? [复制链接]

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:57:09C
日期:2016-10-25 16:17:59
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-27 17:03 |只看该作者 |倒序浏览
char s = 255;

s += '0';
s -= '0';

s被初始化为255,即此时s的8个bit位全部被置为1,当s += '0';后,s的值为101111(二进制),flag寄存器的进位标志被置位。
当s -= '0'后,s被还原为11111111,推测s -= '0'运算使用了进位;
但是当我这样做时:
char s = 255;
int i;

s += '0';
i = 1 - 2;
s -= '0';

s的值还是被还原为11111111,请问,使用了进位后,为什么进位标志还是可以被使用的?

还有,在实际使用上,一个char型的数据(0~255) +'0'后再 -'0'有什么益处?当然,对于数字0~9这样操作后可以转成相应的字符。
目前,我是觉得这段代码时非代码,多此一举。


论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
2 [报告]
发表于 2011-12-27 17:21 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:57:09C
日期:2016-10-25 16:17:59
3 [报告]
发表于 2011-12-27 17:32 |只看该作者
这段代码是公司产品代码里的,它原始的使用是这样的:
char pickupno[2] = {0};


memcpy(pickupno,&userdata,2);   /*userdata是一个2字节的短整型数据*/
pickupno[0] += '0';
pickupno[1] += '0';

/*然后将pickupno拷贝至内存另一个位置*/
short datano;
pickupno[0] -= '0';
pickupno[1] -= '0';

strcpy(&datano,pickupno,strlen(pickupno));


论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:57:09C
日期:2016-10-25 16:17:59
4 [报告]
发表于 2011-12-27 17:32 |只看该作者
最后将datano从socket里发出去

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
5 [报告]
发表于 2011-12-27 17:35 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2011-12-27 19:08 |只看该作者
char s = 255;


你认为这么写正确?

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
7 [报告]
发表于 2011-12-27 19:09 |只看该作者
一个人取暖 发表于 2011-12-27 19:08
你认为这么写正确?


你认为这么写错误?

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
8 [报告]
发表于 2011-12-27 19:10 |只看该作者
shaohui973 发表于 2011-12-27 17:32
这段代码是公司产品代码里的,它原始的使用是这样的:
char pickupno[2] = {0};


strcpy(&datano,pickupno,strlen(pickupno));

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
9 [报告]
发表于 2011-12-27 19:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
10 [报告]
发表于 2011-12-27 19:18 |只看该作者
shaohui973 发表于 2011-12-27 17:32
这段代码是公司产品代码里的,它原始的使用是这样的:
char pickupno[2] = {0};


驱动? 可是也不对啊, 驱动里怎么还会有strcpy之类的。。。。。。
唯一能想出可能会有意义的就是 pickupno 为控制寄存器了, 不过看样子也不象
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP