【问题标题】:c compound assignment increment only right bitsc 复合赋值只增加右位
【发布时间】:2017-06-11 14:30:27
【问题描述】:

我是 C 新手,使用串行设备,我有这行:

short DA, DacData;    
DA=0xFFF;
DacData = ((channel&0x03)<<14)|((serialA&0x03)<<12)|(DA&0x6AA);

如何在循环中只增加 DacData (DA&0x6AA) 的最后一部分?提前致谢!

【问题讨论】:

  • 你关心最后一部分溢出吗?
  • 不确定。可能不会!
  • 那么就是简单的++DacData...
  • @StoryTeller 这会改变 ((channel&0x03)
  • 这个问题比较奇怪! DA&amp;0x6AA 等价于DA&amp;0b11010101010,只是屏蔽了零位。你确定递增的结果是你想要的吗?如果您真的只想设置最后一位,请使用DA &amp; 0x6AA | 0x1,这样下一个人就不会在 10 分钟内摸不着头脑。由于您每次都屏蔽了 lsb,因此增量永远不会执行 lsb。

标签: c hex mbed compound-assignment


【解决方案1】:

试试这个:

DacData = ((channel&0x03)<<14)|((serialA&0x03)<<12) | ( (DA&0x6AA) + 1 );

考虑到有环绕...

【讨论】:

  • 谢谢!我的想法是一样的,不知道这是否是正确的方法当我到达我的实验室时我可以检查这是否有效。如果可以,将接受它作为答案!谢谢
  • @TakuzoKimura - 如果溢出也会影响其他“部分”
  • @Spider-main 很抱歉这个菜鸟问题,但你所说的环绕是什么意思?
  • @StoryTeller 我只想增加最右边的 12 位(它们控制我的 DAC 上的电压),但它会从右边增加,对吗?只要我在 (DA&0xFFF) 停止它就可以了?
猜你喜欢
  • 2021-04-24
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
  • 2012-01-21
  • 2020-04-17
  • 2017-06-20
相关资源
最近更新 更多