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
akatsukinewgrad
May 19, 2022
0
960
_美馬さん_入門_ビット演算.pdf
akatsukinewgrad
May 19, 2022
Tweet
Share
More Decks by akatsukinewgrad
See All by akatsukinewgrad
2023/1/25_QAテスター meet up!
akatsukinewgrad
0
140
成果発表資料.pdf
akatsukinewgrad
0
2.1k
広大なフィールドを気持ちよく駆け抜けるための技術.pdf
akatsukinewgrad
0
590
正規表現とReDoS.pdf
akatsukinewgrad
0
570
Unityで大量のオブジェクト_を吹き飛ばしたい.pdf
akatsukinewgrad
0
630
新卒2年目が思う1年目の学び.pdf
akatsukinewgrad
0
540
障害訓練の取り組みについて.pdf
akatsukinewgrad
0
720
7分でわかるアカツキゲームス
akatsukinewgrad
0
580
Bitcoinだけでスマートコントラクト.pdf
akatsukinewgrad
1
960
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
10
900
How to Think Like a Performance Engineer
csswizardry
27
2.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
Six Lessons from altMBA
skipperchong
29
4k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Building Applications with DynamoDB
mza
96
6.7k
Facilitating Awesome Meetings
lara
57
6.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
Visualization
eitanlees
150
16k
Designing for humans not robots
tammielis
254
26k
GitHub's CSS Performance
jonrohan
1032
470k
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