C言語なら俺に聞け! Part 95
■ このスレッドは過去ログ倉庫に格納されています
0441デフォルトの名無しさん
NGNGそういうもんです。論理シフトとはビット列を何も考えずにシフトするため符号付整数型のデータは
思い通りにシフトできません。簡単のために8bitで説明すると、こうなります。
00010000(10進値: 16)を右に2ビット論理シフトすると
00000100(10進値: 4)となり、4で割った状態となります。しかし
11110000(10進値: -16)を右に2ビット論理シフトすると
00111100(10進値: 60)となり、これは整数値に対する演算として望む結果ではないでしょう。算術シフトすると
11111100(10進値: 4)となり、-16に4をかけたものとなります。
■ このスレッドは過去ログ倉庫に格納されています