OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2660|回复: 9

我又不明白了, C语言移位运算?

[复制链接]

49

主题

160

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-11-2
在线时间
41 小时
发表于 2018-5-11 13:06:27 | 显示全部楼层 |阅读模式
20金钱
下面语句,
RCC->APB1RSTR&=~(1<<17);         
1 左移 17  位,再取反  乘到                 APB1RSTR  上


问题是 1<<17  =??????????

前面并没定义  1  的数据类型啊,


最佳答案

查看完整内容[请看2#楼]

这种位运算在32位平台上就是32位的,因为这是在操作寄存器,所以数据类型在这里没有什么实际意义。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-10-3
在线时间
15 小时
发表于 2018-5-11 13:06:28 | 显示全部楼层
这种位运算在32位平台上就是32位的,因为这是在操作寄存器,所以数据类型在这里没有什么实际意义。
回复

使用道具 举报

49

主题

160

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-11-2
在线时间
41 小时
 楼主| 发表于 2018-5-11 13:10:19 | 显示全部楼层
C语言只是说返回左值的数据类型,

1 = 啥数据类型?
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-5-11 13:28:59 | 显示全部楼层
取反bit17,寄存器应该是32位的,更加严谨的写法你可以加类型转换RCC->APB1RSTR&=~(((unsigned int)1)<<17);  
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4910
金钱
4910
注册时间
2017-7-6
在线时间
720 小时
发表于 2018-5-11 13:47:40 | 显示全部楼层
LIGONG004 发表于 2018-5-11 13:10
C语言只是说返回左值的数据类型,

1 = 啥数据类型?

1就是一个十进制,最好就是跟楼上一样规范的写法
我是小白,很白很白的小白!!!
回复

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2018-5-11 13:51:58 | 显示全部楼层
其实这个问题我也一直想问。

比方1<<63,在stm32里面是否可行?数据类型是double?

然后,1<<15 跟 1<<31,它们的数据类型又是否相等?
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-5-11 14:17:39 | 显示全部楼层
这么多疑问,楼主应该找本C语言书从头好好看一遍
一分耕耘一分收获。
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4910
金钱
4910
注册时间
2017-7-6
在线时间
720 小时
发表于 2018-5-11 14:21:07 | 显示全部楼层
a3748622 发表于 2018-5-11 13:51
其实这个问题我也一直想问。

比方1

看赋值给什么类型的寄存器的值了,stm32最大是32位的,移位超过或者等于32,就是0
我是小白,很白很白的小白!!!
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4910
金钱
4910
注册时间
2017-7-6
在线时间
720 小时
发表于 2018-5-11 14:24:38 | 显示全部楼层
LIGONG004 发表于 2018-5-11 13:10
C语言只是说返回左值的数据类型,

1 = 啥数据类型?

看赋值给什么类型的寄存器的值了,stm32最大是32位的,移位超过或者等于32,就是0,不管1是什么类型,它只是一个值,要具体看移位运算完了给寄存器赋值的是什么类型;
例如:1移位7次,移位完了,给左边的寄存器赋值,左边寄存器的类型为char,也就是8位的寄存器,移位赋值后,那就是10000000,如果移位8次,那就是00000000,就是这么简单
我是小白,很白很白的小白!!!
回复

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2018-5-14 09:13:08 | 显示全部楼层
程功之道 发表于 2018-5-11 14:24
看赋值给什么类型的寄存器的值了,stm32最大是32位的,移位超过或者等于32,就是0,不管1是什么类型,它 ...

棒!~~~~~
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 06:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表