1. 程式人生 > >Java中實現十進位制數轉換為二進位制的幾種辦法

Java中實現十進位制數轉換為二進位制的幾種辦法

Java中實現十進位制數轉換為二進位制

第一種:除基倒取餘法

這是最符合我們平時的數學邏輯思維的,即輸入一個十進位制數n,每次用n除以2,把餘數記下來,再用商去除以2...依次迴圈,直到商為0結束,把餘數倒著依次排列,就構成了轉換後的二進位制數。

那麼,在實際實現中,可以用int的一個數來儲存最後的二進位制,每次求餘後把餘數儲存在int型數的低位,依次遞增。

複製程式碼
 1   public void binaryToDecimal(int n){
 2       int t = 0;  //用來記錄位數
 3       int bin = 0; //用來記錄最後的二進位制數
 4       int r = 0;  //
用來儲存餘數 5 while(n != 0){ 6 r = n % 2; 7 n = n / 2; 8 bin = r * Math().pow(10,t); 9 t++; 10 } 11 System.out.println(bin); 12 }
複製程式碼

但是int型最大隻能表示2^31-1 的正數,所以,儲存的二進位制數位數有限;我們都知道,int在java中的儲存範圍是32位,則可以使用字串的拼接(+)來實現,程式碼如下:

按 Ctrl+C 複製程式碼
按 Ctrl+C 複製程式碼

第二種:利用“移位”操作實現

我們可以直接利用移位操作對一個十進位制數進行移位操作,即:將最高位的數移至最低位(移31位),除過最低位其餘位置清零,使用& 操作,可以使用和1相與(&),由於1在記憶體中除過最低位是1,其餘31位都是零,然後把這個數按十進位制輸出;再移次高位,做相同的操作,直到最後一位 ,程式碼如下。可以說,這是我到目前為止見到的最簡單的實現方式了。

1 public void binaryToDecimal(int n){
2      for(int i = 31;i >= 0; i--)
3          System.out.print(n >>> i & 1);
4 }

說明:由於計算機中儲存的都是數的補碼,正數的原碼、反碼、補碼都是相同的;而負數的原碼、反碼、補碼是不一樣的,補碼=原碼取反+1(符號位不變)。所以,負數是按照它的補碼輸出的。

>>>為邏輯移位符,向右移n位,高位補0
>> 算數移位符,也是向右移n位,不同的是:正數高位補0,負數高位補1
<< 移位符,向左移n位,低位補0

第三種:呼叫API函式

這是處理問題更符合面向物件的一種方式:

複製程式碼
1 public void function1(int n){
2      String result = Integer.toBinaryString(n);
3      //int r = Integer.parseInt(result);
4      //System.out.println(r);
5      System.out.println(result);
6  }
複製程式碼

小小的建議:  此程式碼中,可以直接用字串輸出;也可以利用Interger.parseInt()轉化為int,但不建議這種方式,當為負數時,int型的表示不了32的一個整數

相關推薦

Java實現十進位制轉換二進位制辦法

Java中實現十進位制數轉換為二進位制 第一種:除基倒取餘法 這是最符合我們平時的數學邏輯思維的,即輸入一個十進位制數n,每次用n除以2,把餘數記下來,再用商去除以2...依次迴圈,直到商為0結束,把餘數倒著依次排列,就構成了轉換後的二進位制數。 那麼,在實際實現中,可以用

java實現輸入一個任意十進位制轉換二進位制

package com.xingyi.one.firstdemo; import java.util.Scanner; public class FirstDemo {          //將任意一個十進位制數轉換為二進位制數 &

關於Java的遞迴操作--(以將一個正整型十進位制轉換二進位制例)

遞迴操作是函式一直在呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的程式

C++十進位制轉換二進位制

在 C++ 中,我們可以利用下面的方法,將一個十進位制數直接轉換為二進位制數並輸出。1、bitset<size_t len> 型別可以代表任意長度的二進位制集合。 2、bitset<size_t len>() 建構函式可以將一個十進位制數轉換為其

Problem G: 十進位制轉換二進位制

#include<stdio.h> int main() { int n,a[100]; while(scanf("%d",&n)!=EOF) { int i=0; while(n>0) {

關於用遞迴將十進位制轉換二進位制

#include <stdio.h> //十進位制整數轉換為二進位制數並輸出 void calc(int number);//函式宣告 int main(int argc, con

將 ASCII 碼錶示的十進位制轉換二進位制

<pre name="code" class="plain">SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS DATA SEGMENT SADD DB

組合語言,將ASCII碼十進位制轉換二進位制

STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT MES1 DB 'The ascii cod

十進位制轉化二進位制Java實現

十進位制數轉化為二進位制Java實現 我們先要知道自帶包中有這一函式Integer.toBinaryString(int i) 它可以將我們輸入的十進位制數轉化為二進位制 public static void main(String[] args) { System.out.pri

Java--- 將十進位制整數轉換二進位制

import java.util.Scanner; //程式功能:將十進位制整數轉換為二進位制數 public class Change { public static void main(String[] args

實現一個十進位制轉換二進位制

#include<iostream> using namespace std; void gg(int a) { int c[20]={0},count; count=0; for(int i=0;a>0;i++) { c[i]=a%2; a=a/2; c

十進位制轉化二進位制1的個數

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<math.h> int solve(int n) { int ans = 0; while (n) ans += n &a

Java用中學方法將十進位制轉換二進位制

如何用Java將一個十進位制數轉換成二進位制,我用數學中的老方法試試(初學者 如果你有更好方法請多指教)寫成Java程式碼如下:class toBin { public static void main(String[] args) { int num=88; //要求

C++---將十進位制整數轉換二進位制

#include "stdafx.h" #include <iostream> using namespace std; void change(int x) { //程式功能:將十進位制整數轉換為二進位

c++實現將一個十進位制轉換二進位制

#include "stdafx.h" #include<iostream> using namespace std; //十進位制轉二進位制 int _tmain(int argc, _TCHAR* argv[]) { int x,i=0,j; int a[32]; c

將一個十進位制轉換二進位制輸出--遞迴實現

#include <iostream> using namespace std; void WriteBinary(int n) { if(n==0||n==1) cout<<n; else { WriteBinary(n/2); cout<

用棧實現十進位制轉換任意進位制(2,8,16...).

解題思路:假如N為輸入的數,n為要轉換為的進位制,若要將十進位制231轉換為8進位制數,過程如下; N                        N/n                      N%n 231                   28         

javaString類型轉換yyyy-MM-dd的Date類型

col code edate birt mat led div get sys String birthday ="2017-02-22"; SimpleDateFormat sdf = new SimpleDateFormat(("yyyy-MM-dd")); jav

C++將一個十進位制轉化二進位制

#include"iostream" #include"string" #include"algorithm" #define MAXSIZE 500 int main() { using namespace std; int number,flag=0; int arry

彙編-將輸入的十進位制轉化二進位制

把以ASCII形式表示的十進位制數轉換為二進位制數 .model small .386 .stack 200h .data ascval db '12345' binval dw ? .code main proc start: mov ax, @data mov ds, ax