Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
_美馬さん_入門_ビット演算.pdf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
akatsukinewgrad
May 19, 2022
1k
0
Share
_美馬さん_入門_ビット演算.pdf
akatsukinewgrad
May 19, 2022
More Decks by akatsukinewgrad
See All by akatsukinewgrad
2023/1/25_QAテスター meet up!
akatsukinewgrad
0
160
成果発表資料.pdf
akatsukinewgrad
0
2.1k
広大なフィールドを気持ちよく駆け抜けるための技術.pdf
akatsukinewgrad
0
630
正規表現とReDoS.pdf
akatsukinewgrad
0
620
Unityで大量のオブジェクト_を吹き飛ばしたい.pdf
akatsukinewgrad
0
680
新卒2年目が思う1年目の学び.pdf
akatsukinewgrad
0
580
障害訓練の取り組みについて.pdf
akatsukinewgrad
0
760
7分でわかるアカツキゲームス
akatsukinewgrad
0
620
Bitcoinだけでスマートコントラクト.pdf
akatsukinewgrad
1
1.1k
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
432
67k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
140
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
Everyday Curiosity
cassininazir
0
180
ラッコキーワード サービス紹介資料
rakko
1
2.8M
Why Our Code Smells
bkeepers
PRO
340
58k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
92
Six Lessons from altMBA
skipperchong
29
4.2k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
340
Designing for Timeless Needs
cassininazir
0
180
Transcript
入門 ビット演算 Akatsuki Geek Live 2022 Vol.1 2022/02/24 task
$ whoami Takashi Mima (task4233) 👀 バックエンドとセキュリティ 散歩とGo
task4233.dev 最近は何故かJavaばかり書いてます 2
「入門 ビット演算」の目的 ビット演算の初学者に対して、 ・ビット演算とは何なのか ・ビット演算の利用例 ・ビット演算のメリットとデメリット を提示すること 補足 ・使い慣れている方はコメントやマサカリをお願いします
・説明には C++11 における演算子を用います 3
コンピュータはデータをビットの集合で表している ビット(0 or 1) ・0 と 1 の2通りの状態を表現できるデータの単位 ・電圧の高低などで管理される 例
・単精度浮動小数点数(IEEE 754)は32ビットで1つの数値 ・ASCIIコードは7ビットで1文字 ・整数は利用ビット数に応じて範囲が変化する 4
ビット単位で行う演算がビット演算 演算子 説明 ~ (NOT) 値を反転する & (AND) 両方のビットが1ならば1、そうでなければ0 |
(OR) どちらか一方が1なら1、そうでなければ0 ^ (XOR) どちらか一方のみが1なら1、そうでなければ0 << (左シフト) 指定した数だけビット列を左にずらす >> (右シフト) 指定した数だけビット列を右にずらす 5
ビット演算の利用例 組み込み・ゲームプログラミングでの状態管理 ・条件を満たしている(いない)を簡潔に表現できる ・bool で宣言するよりもメモリが節約できることがある →詳しくは こちら 集合の表現 ・組み合わせを列挙できる ・ネットワークのサブネットマスクとしても利用されている
→詳しくは こちら 6
ビット演算のメリットとデメリット メリット ・利用するデータ領域を削減できることがある ・実行する機械語命令が少ないので高速になることがある デメリット ・可読性が落ちる可能性がある ・意図しない挙動が起きる可能性がある 7
ビット演算のメリットとデメリット メリット ・利用するデータ領域を削減できることがある ・実行する機械語命令が少ないので高速になることがある デメリット ・可読性が落ちる可能性がある →コメントを書くことによって「なぜ」を提示する ・意図しない挙動が起きる可能性がある →ユニットテストで振る舞いを保証する 8
まとめ ビット演算は ・利用するデータ領域を削減できることがある ・実行する機械語命令が少ないので高速になることがある ただし ・意図を書かないと可読性が落ちる可能性がある ・意図しない挙動が起きる可能性がある メリット、デメリットを吟味して 使ってみてください! ありがとうございました!
9
時間が余ったらやる小ネタ 10
2変数のみでのSwap void swap(int *a, int *b) { int tmp =
*a; *a = *b; *b = tmp; } 1 void swap(int *a, int *b) { *a ^= *b; *b ^= *a; *a ^= *b; }
偶数ビットと奇数ビットのSwap ・各自のビットを抜き出してORでくっつけるイメージ int32_t swap_odd_and_even_bits(int32_t val) { return ((val & 0xaaaaaaaa)
>> 1) | ((val & 0x55555555) << 1); } 1
マイナスを使わずに符号反転 ・詳しくは2の補数でググろう void inverse_sign(int *val) { *val = ~*val |
1; } 1
利用されるメモリ 意外とバイト数を無駄に利用していることがある ・bool は 1Byte ・std::bitset は 環境依存 ・boolに4バイトも利用している言語もある 1