close

問題描述:
撰寫一個程式,使用者輸入一個整數,印出8位元的二進制表示。

輸入說明:
輸入一個整數,介於-128~127之間。

輸出說明:
以8位元的二進制顯示。

範例:

題目來源:http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=6906

本題需特別注意 "負號的二進制轉換"

如果以人工來做轉換的話

-2 先用當作正號做二進制轉換,可得出00000010

而負號需先將所有0變為1,1變為0後,再加一

00000010 => 11111101 =>再加一得出 11111110

可是這樣對於程式來說不好處理

所以我們需要找出他的規則

題目特別有說,數字介於-128~127

這時候我們就該開始思考,為何需要做這個設限?

還有為何是輸出八位元的值呢?

十進制(負) 二進制 十進制(正常時)
-1 11111111 255
-2 11111110 254
... ...
-127 10000001 129
-128 10000000 128

這時我們可以注意到-1的值,如果不考慮負號時是255

也就是數字-128的128+127=255

透過這個表可以得出一個規則,255+(負數時的值) +1 =可以得出正常轉換成二進制的值

例如

-1 , 255 + (-1) + 1 =255  轉換二進制 =>11111111

-2 , 255 + (-2) + 1 =254  轉換二進制 =>11111110

-127 , 255 + (-127) + 1 =129  轉換二進制 =>10000001

-128 , 255 + (-128) + 1 =128 轉換二進制 =>10000000

 

import java.util.Scanner;

public class C_MM18 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNext()){
			int a=scanner.nextInt();
			int x=a,y=0; //x表示商(除數) y表示餘數
			String s="";
			if(a<0){
				x=256+a;
			}
			for(int i=0;i<8;i++){
				y=x%2;
				s=Integer.toString(y)+s;
				x=x/2;
			}
			System.out.println(s);
		}
		scanner.close();

	}

}

 

import java.util.Scanner;

public class C_MM18 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNext()){
			int a=scanner.nextInt();
			int x=a;
			String ss="";
			/*while(x!=0){
				ss=String.valueOf(x%2)+ss;
				x=x/2;
			}*/
			if(a<0){
				x=256+x;
			}
			for(int i=0;i<8;i++){
				ss=String.valueOf(x%2)+ss;
				x=x/2;
			}
			System.out.println(ss);
		}
		
		scanner.close();

	}

}


arrow
arrow
    文章標籤
    ITSA Java
    全站熱搜

    阿雅 發表在 痞客邦 留言(0) 人氣()