cxz*_*xzp 2 c bit-shift carryflag
我读到C保持从移位进出,它可以在特定于处理器的.h中找到.
这是真的,我应该使用它吗?或者应该自己计算出结转位?
没有标准的方法来访问C中原始操作的进位.
您将需要在更大的数据类型中执行移位:
uint16_t foo = ...;
uint32_t tmp = (uint32_t)foo << shift;
uint16_t result = (uint16_t)tmp;
uint16_t carry = (uint16_t)(tmp >> 16);
Run Code Online (Sandbox Code Playgroud)
或者通过执行相反的转变:
uint16_t result = foo << shift;
uint16_t carry = foo >> (16 - shift);
Run Code Online (Sandbox Code Playgroud)
请注意,如果第二种方法调用未定义的行为shift == 0,那么您需要单独处理该情况.