The Yak Shaver
さあ、今日も毛を刈ろう。
skip to main
|
skip to sidebar
2013/06/05
C言語のビット演算子 まとめ
#### ビット演算子のおさらい 例 16進数 2進数 NOT '~' ~0x04 => 0xFB (~0000_0100 => 1111_1011) OR '|' 0x26 | 0x14 => 0x36 ( 0010_0110 | 0001_0100 => 0011_0110) AND '&' 0x26 & 0x14 => 0x04 ( 0010_0110 & 0001_0100 => 0000_0100) XOR '^' 0x26 ^ 0x14 => 0x32 ( 0010_0110 ^ 0001_0100 => 0011_0010) #### 実践編 実際にはビットマスクを使って下記のようにすることが多いです。 ##### あるビットを立てたい(1にしたい)→ OR mask = 0x04; // 0000_0100 PORTB |= mask; // bit2 を立てる ##### あるビットを寝かせたい(0にしたい)→ AND mask = 0x04; // 0000_0100 PORTB &= ~mask; // bit2 を寝かす マスクを一旦 NOT して、それを AND するという2段階が必要 ##### あるビットを反転させたい → XOR mask = 0x04; // 0000_0100 PORTB ^= mask; // bit2 を反転させる #### XOR についての注意 元のビットが 1 のときに XOR を使うとビットを寝かせることができるので、AND の代わりに使えそうです。AND が2段階必要なのに比べるとシンプルにも思えます。 しかしこの方法は、元のビットが想定外に0に変化してしまうと、XOR の結果は 1 になる(立ってしまう)ため、下手をすればバグの元となります。 特に割り込み許可フラグや状態遷移のフラグなどにこの手の操作をしてしまうと、盛大にバグる上に発見が難しいです。 なので、XOR のそういう使い方は避け、純粋にビット反転の用途のみに使うべきです。
0 コメント :
コメントを投稿
次の投稿
前の投稿
ホーム
About
Unknown
詳細プロフィールを表示
Labels
AVR
( 12 )
Blogger
( 10 )
Chrome
( 2 )
cocoa
( 5 )
Eagle
( 5 )
emacs
( 31 )
game
( 1 )
Google
( 4 )
iPhone
( 2 )
Javascript
( 1 )
lisp
( 4 )
LPCXpresso
( 1 )
mac
( 53 )
Markdown
( 4 )
msp430
( 1 )
NXP
( 1 )
Parallels Desktop
( 1 )
PIC
( 3 )
python
( 19 )
Raspberry Pi
( 9 )
ruby
( 1 )
Safari
( 2 )
shell script
( 4 )
Sublime Text
( 1 )
windows
( 7 )
xcode
( 8 )
xyzzy
( 60 )
おぼえがき
( 69 )
まとめ
( 6 )
メール
( 2 )
よもやま
( 19 )
工作
( 23 )
電験
( 4 )
本日の探索結果
( 2 )
Blog Archive
►
2015
( 3 )
►
02
( 1 )
►
01
( 2 )
►
2014
( 17 )
►
12
( 1 )
►
07
( 3 )
►
06
( 3 )
►
04
( 2 )
►
03
( 4 )
►
01
( 4 )
▼
2013
( 135 )
►
12
( 5 )
►
10
( 6 )
►
09
( 7 )
►
08
( 10 )
►
07
( 24 )
▼
06
( 15 )
大ざっぱすぎる西暦→和暦変換。
MacPorts で Python3.3を入れる
Emacs で JSON を Flymake する
コマンドラインで使える JSON Lint
ちょこっと確認するとき用の shell モード
一番簡単な Raspberry Pi 用SDカードの作り方
メジャーモードごとに eval-region を切り替える
Emacs Lisp の関数のすげ替え テスト
摂氏 [°C] と 華氏 [°F] の変換グラフ
あるXtalをボーレート設定に使ったときの誤差を求める
ボーレート設定用クリスタルの周波数の見分け方
CSSのセレクタまとめ
C言語のビット演算子 まとめ
AVR Dragon 接続できない件
ウェブ上のインタープリタ codepad
►
05
( 15 )
►
04
( 17 )
►
03
( 13 )
►
02
( 17 )
►
01
( 6 )
►
2012
( 11 )
►
10
( 5 )
►
07
( 1 )
►
02
( 2 )
►
01
( 3 )
►
2011
( 86 )
►
12
( 2 )
►
11
( 2 )
►
10
( 1 )
►
07
( 2 )
►
06
( 3 )
►
05
( 20 )
►
04
( 49 )
►
03
( 7 )
►
2009
( 4 )
►
03
( 1 )
►
01
( 3 )
►
2008
( 8 )
►
12
( 8 )
STAT
Ads
Amazon.co.jp ウィジェット
Powered by
Blogger
.
0 コメント :
コメントを投稿