タグ

2016年8月20日のブックマーク (3件)

  • 足し算を使わずに足し算する — KaoriYa

    int add(int a, int b) { while (b != 0) { int c = (a & b) << 1; a ^= b; b = c; } return a; } はい。この関数では足し算(演算子)を使わずに、ビット演算とループだけで足し算(加算)を実現しています。いわゆる全加算器ってやつで、これと同じ事が電気回路的に行われるのがCPUにおける足し算(演算子)です。 ざっくり解説しますと、一時変数cには各桁のキャリーを計算しています。キャリーはこんな真偽値表なので、 abc

    gologo13
    gologo13 2016/08/20
    加算器
  • ビット演算メモ - ボクノス

    ハッカーのたのしみ読んでます。実はこの、「解説が殆ど無い」。提示されているのは式のみ。後は自分で探るしかないのだ・・・メモメモ。 記号はCの演算子。=は等号。 & マスク。共通するビット以外をオフにする効果を持つ。 例:IPアドレス & サブネットマスク = ネットワークアドレス 192.168.1.100 & 255.255.0.0 = 192.168.0.0 | ビットを立てる。とにかくビットが立ってたらビットを立てる。 例:ファイルhoge.scmの権限は644なので、実行権限(111)を与える。chmod +x hoge.scm 644 | 111 = 755 (8進数) ~(not) ビットの反転。1の補数を取る。 ^(xor) 繰上り無しの足し算。mod2世界の足し算と覚えておくと忘れない。 1 ^ 1 = 0 1 + 1 = 0 (mod 2) -1 最右のビットを消して、

    ビット演算メモ - ボクノス
    gologo13
    gologo13 2016/08/20
    半加算器 s = x^y, c =x & y. 全加算器 s = x ^ y ^ c-in, c = (x & y) & ((x ^ y) & c-in)
  • 数字根 - Wikipedia

    数字根(すうじこん、英: digital root)とは、正の整数値の各位の和(数字和)を求め、結果の数字和を求め、という操作を繰り返し、最終的に得られる 1 桁の数を指す。 例えば、65536 の数字根は 7 である。(6 + 5 + 5 + 3 + 6 = 25 → 2 + 5 = 7) 一般に正の整数値 n の数字根は n を 9 で割った余りに等しい[注釈 1]ので、全ての桁の数字を加算するのではなく、9 を法とする合同式によって計算可能であり、巨大な数の数字根を求める際に時間を節約できる。 数字根はチェックサムの一種としても利用できる。例えば、加算において和の数字根と被加数の数字根の和の数字根は常に等しい。これを利用した検算方法として九去法がある。 性質[編集] 特定の数の数字根の特殊例として、次のようなものがある。 0 の数字根は 0 である。 一般に正の整数値 n の数字根は