とあるコード見てたら"~"とか"|"出てきたので少し調べてみた。
CPUからすればビット演算は簡単な論理回路で実現できるが、四則演算、特に乗除算は複雑な論理回路を必要とするため、多くのコンピュータでは、ビット演算は加減算より若干速く、乗除算よりずっと高速である。
http://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97%E5%AD%90
とりあえずやってみる
>>> a = 1 >>> b = 2 >>> c = a | b >>> c 3 >>> a & b 0 >>> a | b 3 >>> d = 3 >>> c & d 3 >>> b | a 3 >>> 1 + ~1 -1 >>> 2 + ~2 -1 >>> ~0 -1 >>> for i in range(10): ... print i, ~i, i + ~i ... 0 -1 -1 1 -2 -1 2 -3 -1 3 -4 -1 4 -5 -1 5 -6 -1 6 -7 -1 7 -8 -1 8 -9 -1 9 -10 -1
どのようなときに"~x"とか使うんだろ?
"+"と"|"の計算速度を実験してみる
import time def hoge(pattern): t1 = time.clock() sum = 0 for i in range(1, 100001): if pattern == 1: sum = sum + i #hoge(0) else: sum = sum | i #hoge(1) t2 = time.clock() return t2 - t1
hoge(0)が"+"の場合、hoge(1)が"|"の場合、
>>> hoge(0) 0.070000000000000284 >>> hoge(0) 0.059999999999999609 >>> hoge(0) 0.070000000000000284 >>> hoge(0) 0.060000000000000497 >>> hoge(0) 0.059999999999999609 >>> >>> hoge(1) 0.049999999999999822 >>> hoge(1) 0.049999999999999822 >>> hoge(1) 0.049999999999999822 >>> hoge(1) 0.060000000000000497 >>> hoge(1) 0.049999999999999822
確かに"+"より"|"を使ったものが若干速い。(こういうこと?)
結局、ビット演算てどのような時に使うと便利なの?(´・ω・`)
速く計算したい時とか?