野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9648|回复: 5

找不到讲解,求教 ,怎么理解下面的位操作

[复制链接]
发表于 2017-6-27 17:37:24 | 显示全部楼层 |阅读模式
GPIOB_CRL &= ~( 0x0F<< (4*0));   //清空控制 PB0 的端口位




GPIOB_CRL |= (1<<4*0);    // 配置 PB0 为通用推挽输出,速度为 10M



回复

使用道具 举报

发表于 2017-6-27 17:44:14 | 显示全部楼层
就是移位操作,觉得难理解你可以先把右边的数值算出来再代入运算,那个4*0的4是一共操作多少位,0是指PB0的0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-27 18:00:36 | 显示全部楼层
左丘冰 发表于 2017-6-27 17:44
就是移位操作,觉得难理解你可以先把右边的数值算出来再代入运算,那个4*0的4是一共操作多少位,0是指PB0的 ...

算出来代入运算过,把0x0f换成数字,4*0的0换成其他的感觉又懵了

GPIOB_CRL |= (1<<4*0);  右边的我理解成把1在0000中左移0位即0001,然后与CRL或运算。但是不理解 0x0F<< (4*0)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-27 18:01:40 | 显示全部楼层
左丘冰 发表于 2017-6-27 17:44
就是移位操作,觉得难理解你可以先把右边的数值算出来再代入运算,那个4*0的4是一共操作多少位,0是指PB0的 ...



(1<<4*0);  我理解成把1在0000中左移0位即0001,然后进行或运算。但是不理解 0x0F<< (4*0)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-27 18:02:06 | 显示全部楼层
左丘冰 发表于 2017-6-27 17:44
就是移位操作,觉得难理解你可以先把右边的数值算出来再代入运算,那个4*0的4是一共操作多少位,0是指PB0的 ...



(1<<4*0);  我理解成把1在0000中左移0位即0001,然后进行或运算。但是不理解 0x0f<< (4*0)
回复 支持 反对

使用道具 举报

发表于 2017-7-24 17:54:23 | 显示全部楼层
0x0f=0000000000001111<<(4*0)意思就是后4位的一作为一个整体向左移动0位,例如0x0f<<(4*1)移位后相当于0000000011110000
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-16 11:05 , Processed in 0.035694 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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