deyu35 发表于 2014-12-13 13:44:34

直接对一个数左移n位再赋值,是低位对应赋值吗?

如ADC0CF = ((SYSCLK / 3000000) - 1) << 3;
ADC0CF是8位寄存器,SYSCLK=24M

不太清楚((SYSCLK / 3000000) - 1)是以什么格式存储的,8位还是int?

cainizi 发表于 2014-12-13 13:50:04

8位机,int是8bit。左移是去掉高位,空出低位。

bj232 发表于 2014-12-13 15:29:32

左移的意思是将数据转换成2进制,之后所有数据向左移动,最右边补0
比如01010001左移1位就是10100010
如果是左移2位,就出现了循环移位和不循环的问题,
于是就有01000100和01000101的区别了

macaroni 发表于 2014-12-13 15:45:55

((SYSCLK / 3000000) - 1) << 3 是编译器在编译当中已经计算好了的值,存储在rom中,单片机在执行语句的时候从ROM中取出这个值写入指定的地址。
页: [1]
查看完整版本: 直接对一个数左移n位再赋值,是低位对应赋值吗?