/**
 * 16進数を表示するプログラム<br>
 * シフト演算と論理演算の勉強のために書いたプログラム<p>
 *
 * @author satoshi okita
 * @version 1.0 2004/04/08
 * 参考資料<br>
 * Welcome to 'Strange Home Another Space' !<br>
 * @see <a href="http://www.komaba.utmc.or.jp/~amedama/javalecture/lecture_2_3.html"> プログラミング(Java)第二回</a>
 * @see Java(tm) House Mailing List Homepage JavaHouse-Brewers:2885
 */
public class Hex {
    
    public static void main(String []args) {
        Hex hexObj = new Hex();
        hexObj.patten1();
        System.out.println("");
        hexObj.patten2();
        
    }
    
    /**
     * Welcome to 'Strange Home Another Space' !を参考に記述
     */
    public void patten1() {
        int data = 1;
        for (int i = 0; i < 32; i++) {
            System.out.print((data & (1 << 31)) == 0 ? 0 : 1);
             if ((i + 1) % 4 == 0) {
                 System.out.print(" ");
             }
            data <<= 1;
        }
    }

    /**
     * <code>patten1</code>メソッドでは元データとなる<code>data< /code>変数に
     * 変更を加えていたが、この例では元データ<code>data2</code>に変更を加えな
     * いように<b>リファクタリング</b>した
     */
    public void patten2() {
        int data2 = 2;
        for (int i = 31; i >= 0; i--) {
            if ((i + 1) % 4 == 0) {
                 System.out.print(" ");
            }
            System.out.print((data2 & (1 << i)) == 0 ? 0 : 1);
        }
    }
}