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);
または反対のシフトを実行することによって:
uint16_t result = foo << shift;
uint16_t carry = foo >> (16 - shift);
この 2 番目のメソッドは、未定義の動作 ifshift == 0
を呼び出すことに注意してください。したがって、そのケースを個別に処理する必要があります。