2014年3月6日木曜日

開発環境

C++実践プログラミング (スティーブ オウアルライン (著)、Steve Oualline (原著)、Steve Oualline(原著)、望月 康司(翻訳)、クイープ(翻訳) 、オライリー・ジャパン)のⅡ部(シンプルなプログラミング)の11章(ビット演算)、11.8(ビットマップグラフィックス)、実習 11-4を解いてみる。

その他参考書籍

実習 11-4

コード(BBEdit, Emacs)

sample195_4.cpp

#include <iostream>

int main()
{
  int n;
  int count_bit(int n);

  for (n = -15; n < 16; ++n) {
    std::cout << n << ": " << count_bit(n) << '\n';
  }

  int a = 2147483647;
  int b = -2147483648;
  std::cout << a << ": " << count_bit(a) << '\n';
  std::cout << b << ": " << count_bit(b) << '\n';
  
  return (0);
}

int count_bit(int n)
{
  int count = 0;
  
  if (n >= 0) {
    while (n != 0) {
      if ((n & 1) == 1) {
        ++count;
      }
      n >>= 1;
    }
  } else {
    int m = 1;
    while (n != 0) {
      if ((n & m) != 0) {
        ++count;
        n = n ^ m;
      }
      m <<= 1;
    }
  }
  return count;
}

Makefile

#
# FSFのg++コンパイラ用のMakefile
#
CC=g++
CFLAGS=-g -Wall
all: sample195_4

sample195_4: sample195_4.cpp
 ${CC} ${CFLAGS} -o sample195_4 sample195_4.cpp

clean:
 rm sample195_4

入出力結果(Terminal)

$ make && ./sample195_4
g++ -g -Wall -o sample195_4 sample195_4.cpp
-15: 29
-14: 29
-13: 30
-12: 29
-11: 30
-10: 30
-9: 31
-8: 29
-7: 30
-6: 30
-5: 31
-4: 30
-3: 31
-2: 31
-1: 32
0: 0
1: 1
2: 1
3: 2
4: 1
5: 2
6: 2
7: 3
8: 1
9: 2
10: 2
11: 3
12: 2
13: 3
14: 3
15: 4
2147483647: 31
-2147483648: 1
$

0 コメント:

コメントを投稿