在时钟配置中有一个配置系统频率为72MHz的函数SetSysClockTo72其中选择PLL为系统时钟的语句 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));//这一句是初始化 RCC->CFGR的SW位,那么为什么要用两次的强制类型转换
(uint32_t)((uint32_t)~(RCC_CFGR_SW)),PS:已知 RCC_CFGR_SW 为uint32_t类型的数据 为什么在取反后强制转换为uint32_t后 有来了一次强制转换(uint32_t)
是我读句子读错了 还是怎么回事 求大神解答!!
感激不尽!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
在一般应用时这不会是个问题, 但当你企图取反的话就会有问题
(uint8)~abc 的取反是 _1111_1100
(uint16)~abc 的取反是 _1111_1111_1111_1100
(uint32)~abc 的取反是 _1111_1111_1111_1111_1111_1111_1111_1100
给一个32位寄存器 XYZ &= (uint8)~abc == XYZ &= _0000_0000_0000_0000_0000_0000_1111_1100
这显然不是你想要的结果, 所以取反常量时要给它定义为目标的相同类型。
在这一句当中最前面的(unit32_t)是没需要的, 只是加了也不会报错, 好比
int a=10;
int b;
b=(int)a;是不会报错, 但这个(int)是多余的, 甚至你写成
b=(int)((int)a); 这个也不会报错
谢谢哥哥
一周热门 更多>