Home > C言語 | 聞いて欲しい独り言 > C言語 ビット演算?

C言語 ビット演算?

原油高のせいか、油が足りません。
スーパーでもらったレジ袋を開けられないこと約1分。指をなめると開けられるんでしょうが、負けた気がするのでなんとか爪で突破口を開きました。

C言語だとよくビット演算やらビットシフトやらをやると思います。


unsigned long a = 0x80;
unsigned long b;

b = a>>1;

しかしこの右シフト、符号付整数と符号なし整数では動作が違う。ということを昨日知った。
符号付の場合は算術シフト、符号なしの場合は論理シフト。
算術シフトでは符号をあらわすビット、つまり先頭のビットは移動しない。
だから例えば


long a = -2;
long b;

b = a>>1;

とするとbは-1になるという。


long a = -2;
long b;

b = ((unsigned int)a)>>1;

だとbは2147483647になるという。

というわけなんですが、実は符号付整数の右シフトが算術シフトになるか論理シフトになるかは処理系依存らしいです。一般的には算術ですが。
あと右シフトだけでなく符号付整数のビット演算は全部処理系依存って話も。未確認ですが。

以上

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://red-treasure.com/report/wp-trackback.php?p=184
Listed below are links to weblogs that reference
C言語 ビット演算? from コスミー報告書[社外秘]

Home > C言語 | 聞いて欲しい独り言 > C言語 ビット演算?

Search
Feeds
Meta
 合計:018987
 今日:0126 昨日:0157

Return to page top