打印
[uCOS/RTOS]

c语言的高手请进

[复制链接]
4768|40
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
江陵龙少|  楼主 | 2017-4-7 14:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
feelhyq| | 2017-4-7 16:08 | 只看该作者
楼主不好意思,作为C语言的低手我向来凑个热闹。 unsigned char 类型和unsigned int类型进行运算,首先会将小的转成大的 即 unsigned char转成unsigned int再参与运算,谭浩强的《C语言程序设计》有这一段话。

使用特权

评论回复
板凳
woshixinshou| | 2017-4-7 18:16 | 只看该作者
楼上分析到位~

使用特权

评论回复
地板
江陵龙少|  楼主 | 2017-4-7 18:38 | 只看该作者
feelhyq 发表于 2017-4-7 16:08
楼主不好意思,作为C语言的低手我向来凑个热闹。 unsigned char 类型和unsigned int类型进行运算,首先会将 ...

那么,层主的答案是0xFC吗?

使用特权

评论回复
5
江陵龙少|  楼主 | 2017-4-7 18:47 | 只看该作者
本帖最后由 江陵龙少 于 2017-4-7 19:18 编辑

我来解答,ss按位取反后,为0XFC,然后扩展成32位位宽,再赋值给data,那么答案就是0X0000 00FC。是这样吗?

使用特权

评论回复
6
江陵龙少|  楼主 | 2017-4-7 18:48 | 只看该作者
本帖最后由 江陵龙少 于 2017-4-7 19:18 编辑

我来解答,ss按位取反后,0XFC,然后扩展成32位位宽,再赋值给data,那么答案就是0X0000 00FC。是这样吗?

使用特权

评论回复
评论
zyj9490 2017-4-7 19:27 回复TA
是16位吧,INT类型。 
zyj9490 2017-4-7 19:25 回复TA
正解。 
7
zyj9490| | 2017-4-7 19:23 | 只看该作者
0X00FC

使用特权

评论回复
8
zyj9490| | 2017-4-7 19:25 | 只看该作者
本帖最后由 zyj9490 于 2017-4-7 19:26 编辑
feelhyq 发表于 2017-4-7 16:08
楼主不好意思,作为C语言的低手我向来凑个热闹。 unsigned char 类型和unsigned int类型进行运算,首先会将 ...

左边的类型与右边运算无关。运算好后再付值而已。

使用特权

评论回复
9
zyj9490| | 2017-4-7 19:29 | 只看该作者
feelhyq 发表于 2017-4-7 16:08
楼主不好意思,作为C语言的低手我向来凑个热闹。 unsigned char 类型和unsigned int类型进行运算,首先会将 ...

明显是错的。是他错,还是理解错。指的是同一边运算。

使用特权

评论回复
10
zyj9490| | 2017-4-7 19:30 | 只看该作者
feelhyq 发表于 2017-4-7 16:08
楼主不好意思,作为C语言的低手我向来凑个热闹。 unsigned char 类型和unsigned int类型进行运算,首先会将 ...

根据你的理解应为0Xfffc.

使用特权

评论回复
11
mo_chen| | 2017-4-7 20:00 | 只看该作者
unsigned char 为8为,usigned int 为16位,先计算等号右边的取反,之后为了保证数据不丢失,等号右边的将转换成unsigned int再进行赋值运算

使用特权

评论回复
12
zhaoliang3057| | 2017-4-7 20:43 | 只看该作者
我也一样。。。。

使用特权

评论回复
13
taoest| | 2017-4-7 21:59 | 只看该作者
不要写这种你也不确定的程序。

使用特权

评论回复
14
xxzouzhichao| | 2017-4-7 22:53 | 只看该作者
整型提升,fffffffc

使用特权

评论回复
15
icecut| | 2017-4-8 00:12 | 只看该作者
1.无符号数.这个是重点
2. 3->~3=0xfc->int = 0x00fc
如果是有符号数,就不是这样了

使用特权

评论回复
16
ddllxxrr| | 2017-4-8 06:45 | 只看该作者
0x00fc

使用特权

评论回复
17
crazyren| | 2017-4-8 08:13 | 只看该作者
我觉得啊,折腾这种隐晦的语法没多少意义,说不定结果跟编译器还有关系。代码应该简单易懂,无歧义

使用特权

评论回复
18
jiemnij| | 2017-4-8 08:58 | 只看该作者
毫无疑问0xFFFF FFFC

使用特权

评论回复
19
江陵龙少|  楼主 | 2017-4-8 09:06 | 只看该作者
本帖最后由 江陵龙少 于 2017-4-8 09:11 编辑

好了,现在公布问题的来源和正确的结果,14楼的大神一言而决,说出了正确的结果。对于整形提升,还是有点迷糊。问题的来源,在system_stm32f10x.c文件中有个函数SetSysClockTo72(),其中有条语句FLASH->ACR &= (uint32_t) ((uint32_t) ~FLASH_ACR_LATENCY);其中,FLASH_ACR_LATENCY就是一个8位无符号整形型常量,这句代码引起了我的疑惑,进而有了上面的测试,对于那些开口则言不要这样写歧义的代码,我觉得很不负责任。

使用特权

评论回复
20
Xy201207| | 2017-4-8 09:10 | 只看该作者
自己分析 然后根据实践不就好了,分析与实践结果不同再问吧.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

279

帖子

2

粉丝