标题: 关于C语句写法的疑问 [打印本页]

作者: 温柔的郎    时间: 2022-2-16 17:22
标题: 关于C语句写法的疑问
各位大神,我是个小白,在其他大神程序里看到这样的写法,有些不太明白,如下图

其中这句TMOD &= ~(1<<6);//Timer1 set As Timer,
中的(1<<6);意思是把01h左移6位,由二进制数0000 0001变为0100 0000,即(1<<6)=16进制40h=0x40


那写成TMOD &= ~0x4写法就比较简单了,不知为什么这位大神却写成这样TMOD &= ~(1<<6);
而且,程序里有        AUXR &= ~0x01;        
                       TMOD &= ~(1<<6);        
                       TMOD &= ~0x30;        
                        AUXR |=  (1<<6);这样的2种写法混合着用,
那究竟用1<<6有什么优点吗?
有知道的大神指点指点!!感谢!!

作者: xws245925587    时间: 2022-2-16 19:41
看着芯片寄存器手册,就很清楚了,配置寄存器哪个位为0或1,两种写法原理都是一样
作者: 田贺    时间: 2022-2-16 20:09
1<<6操作的哪一位看起来很直观,如果是一个数值的话还得多想一下拐个弯
作者: 名字不是重点    时间: 2022-2-17 09:08
1<<6是直接位赋值,意思是把bit6置为“1“,其它位不变,不是楼主你所说的是"移位":
作者: xstong    时间: 2022-2-18 08:30
主要是看起来直观,方便后期维护代码时,一眼能明白这么操作的目的。TMOD &= ~(1<<6);  将寄存器TMOD的位BIT6置为零。只是每个人的程序抒写风格问题。
作者: 郑汉松    时间: 2022-2-18 09:20
1<<6可以轻松知道对数据的第六位进行操作,但是你写0x40虽然大家也看得懂,但是得在脑海中转化一下吧,看程序时转化几个可能没问题,但多了可能就会烦也容易出错。有大佬说过,当你能像读文章那样轻松阅读一份代码时,不一定是你的编程能力提升了,可能是编写这份代码的人有着深厚的功底!增加程序可读性是非常重要的,所以应该学着养成这种习惯。
作者: rundstedt    时间: 2022-2-18 22:10
一旦你看懂了,就知道这种写法非常直观容易理解。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1