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(); } }
文章標籤
全站熱搜