練習問題9.2
立っているbitの数を取得する
public class CheckBit { public static int CheckBitCount(Integer n) { int Counter=0; for(int j=0;j<Integer.SIZE;j++){ Counter += (n & 1); n = n >>> 1; } return Counter; } public static void main(String[] args) { System.out.printf("%31sの1の数は:%d\n", Integer.toBinaryString(12),CheckBit.CheckBitCount(12)); System.out.printf("%31sの1の数は:%d\n", Integer.toBinaryString(Integer.MAX_VALUE),CheckBit.CheckBitCount(Integer.MAX_VALUE)); System.out.printf("%31sの1の数は:%d\n", Integer.toBinaryString(Integer.MIN_VALUE),CheckBit.CheckBitCount(Integer.MIN_VALUE)); } }
実行結果
1100の1の数は:2
1111111111111111111111111111111の1の数は:31
10000000000000000000000000000000の1の数は:1
公開されているアルゴリズムとの比較という事で、Integer.bitCountの実装を見てみた。
i = i - ((i >>> 1) & 0x55555555); i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); i = (i + (i >>> 4)) & 0x0f0f0f0f; i = i + (i >>> 8); i = i + (i >>> 16); return i & 0x3f;
こんな感じになってる。ループも分岐も無くできるんだなぁ。
練習問題9.1
無限大の計算
public class Infinity { public static void main(String[] args) { Double pi = Double.POSITIVE_INFINITY; Double ni = Double.NEGATIVE_INFINITY; System.out.println("∞ + ∞ = " + (pi + pi)); System.out.println("∞ + -∞ = " + (pi + ni)); System.out.println("∞ - ∞ = " + (pi - pi)); System.out.println("∞ - -∞ = " + (pi - ni)); System.out.println("∞ * ∞ = " + (pi * pi)); System.out.println("∞ * -∞ = " + (pi * ni)); System.out.println("∞ / ∞ = " + (pi / pi)); System.out.println("∞ / -∞ = " + (pi / ni)); } }
実行結果
∞ + ∞ = Infinity
∞ + -∞ = NaN
∞ - ∞ = NaN
∞ - -∞ = Infinity
∞ * ∞ = Infinity
∞ * -∞ = -Infinity
∞ / ∞ = NaN
∞ / -∞ = NaN
ssh_configを活用しよう!
sshクライアントの設定ファイル(~/.ssh/config)を利用して便利なsshライフを。configファイルを利用する事で、接続先sshサーバのaliasを作れたり、複数の秘密鍵を使い分けたりできる。クライアント環境はmac OS X 10.5
例えば普段
ssh -l user1 example.com
で接続してる人は、configファイルに
Host ex HostName example.com User user1
とすれば、
ssh ex
で接続できる!
さらに、example.jp へは、ユーザ名 user2 id_rsa.exjp という秘密鍵で接続したい場合は
Host ex-jp HostName example.jp User user2 IdentityFile .ssh/id_rsa.exjp
とすると
ssh ex-jp
で接続可に!便利^^
もっと詳しい情報は
man ssh_config
練習問題7.3
public class PascalsTriangle { private int pascal[][]; public PascalsTriangle(int num) { pascal = new int[num][]; for(int i=0,j=0;i<pascal.length;i++){ pascal[i] = new int[i+1]; pascal[i][j]=1; pascal[i][i]=1; } calc(); } public int[][] calc(){ for(int j=2;j<pascal.length;j++) for(int i=1;i<pascal[j].length-1;i++) pascal[j][i]=pascal[j-1][i-1]+pascal[j][i-1]; return pascal; } public void show(){ for (int[] array : pascal) { for (int i : array) System.out.printf(" %d ", i); System.out.println(); } } public static void main(String[] args) { PascalsTriangle pt = new PascalsTriangle(12); pt.show(); } }
実行結果
1
1 1
1 2 1
1 2 4 1
1 2 4 8 1
1 2 4 8 16 1
1 2 4 8 16 32 1
1 2 4 8 16 32 64 1
1 2 4 8 16 32 64 128 1
1 2 4 8 16 32 64 128 256 1
1 2 4 8 16 32 64 128 256 512 1
1 2 4 8 16 32 64 128 256 512 1024 1
練習問題7.2
public class ConvertType { public static void main(String[] args) { int tmpi=0; long tmpl=0; byte maxByte = 127; byte miniByte = -128; short maxShort = 32767; short miniShort = -32768; int maxInt = 2147483647; int miniInt = -2147483648; long maxLong = 9223372036854775807L; long miniLong = -9223372036854775808L; float maxFloat = 3.4028235E38F; float miniFloat = 1.4E-45F; double maxDouble = 1.7976931348623157E308D; double miniDouble = 4.9E-324D; System.out.println(maxByte); System.out.println(miniByte); System.out.println(maxShort); System.out.println(miniShort); System.out.println(maxInt); System.out.println(miniInt); System.out.println(maxLong); System.out.println(miniLong); System.out.println(maxFloat); System.out.println(miniFloat); System.out.println(maxDouble); System.out.println(miniDouble); System.out.println(tmpi=(int)miniByte); System.out.println(tmpi=(int)miniShort); System.out.println(tmpi=(int)miniLong); System.out.println(tmpi=(int)miniFloat); System.out.println(tmpl=(int)miniDouble); System.out.println(tmpl=miniByte); System.out.println(tmpl=miniShort); System.out.println(tmpl=miniLong); System.out.println(tmpl=(long)miniFloat); System.out.println(tmpl=(long)miniDouble); } }
練習問題7.1
public static void main(String[] args) { System.out.println("\u0048\u0045\u004c\u004c\u004f \u0057\u004f\u0052\u004c\u0044"); }