java二進制演算法
❶ 二進制相加 怎麼用java實現
兩個數相加,會得到一個結果,和一個進位的結果,
然後將這個進位的結果後面加0補位,然後再和這個結果相加。如此遞歸,知道進位全部是0為
public class $ {
public static void main(String[] args) {
String s0 = "100";// 十進制4
StringBuffer result = new StringBuffer();
StringBuffer jinwei = new StringBuffer();
System.out.println(test(result, jinwei, ));
}
private static String test(StringBuffer result, StringBuffer jinwei, String s0, String {
// 沒有進位了就退出
if (s0.length() > 0 && s0.indexOf("1") < 0) {
return s1;
}
//位數補齊
int len0 = s0.length();
int len1 = s1.length();
int minLen = Math.max(len0, len1);
s0 = buqi(len0, minLen) + s0;
s1 = buqi(len1, minLen) + s1;
for (int i = s0.length() - 1; i >= 0; i--) {
String str0 = s0.substring(i, i + 1);
String str1 = s1.substring(i, i + 1);
add(result, jinwei, str0, str1);
}
String tmpJinwei = jinwei.reverse().toString() + "0";
jinwei.delete(0, jinwei.length());
String tmpResult = result.reverse().toString();
result.delete(0, result.length());
return test(result, jinwei, tmpJinwei, tmpResult);
}
private static void add(StringBuffer result, StringBuffer jinwei, String str0, String str1) {
// 00相加為0,不進位
if ("0".equals(str0) && "0".equals(str1)) {
result.append("0");
jinwei.append("0");
return;
}
// 11相加為0,進位1
if ("1".equals(str0) && "1".equals(str1)) {
result.append("0");
jinwei.append("1");
return;
}
// 其他情況,相加為1,不進位
result.append("1");
jinwei.append("0");
}
private static String buqi(int len0, int minLen) {
String tmp = "";
for (int i = len0; i < minLen; i++) {
tmp += "0";
}
return tmp;
}
}
❷ java中二進制怎麼表示
二進制是計算技術中廣泛採用的一種數制。二進制數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是「逢二進一」,借位規則是「借一當二」,由18世紀德國數理哲學大師萊布尼茲發現。當前的計算機系統使用的基本上是二進制系統,數據在計算機中主要是以補碼的形式存儲的。計算機中的二進制則是一個非常微小的開關,用「開」來表示1,「關」來表示0。
1、Java中定義兩個數,然後分別列印出它們的二進製表示:
System.out.println("Java二進制7: "+Integer.toBinaryString(7));
System.out.println("Java二進制-7: "+Integer.toBinaryString(-7));
輸出:
Java二進制7:
111
Java二進制-7:
可以看到Java中對於數的表示屬於有符號的,那麼這個是怎麼來的?
7好辦,直接是111
-7轉化二進制的過程:
(1)把-7轉化成7,二進制是
111
(2)Java中對於不滿32位的int二進制自動補齊,所以變成了
(29個0)111
(3)然後取反
(29個1)000
(4)然後加1
(29個1)001
這就是-7的整個轉化過程,那麼現在有一個問題,如果有一個文本文件,每一行有八位二進制,表示的范圍是(0~255),也就是用一個位元組表示的無符號整數,如果現在要把這些二進制轉化成整數存到文件里應該怎麼做?
文件:
line1
11111110
(254)
line2
00000000
(0)
假設用Java讀進了第一行,那麼直接列印出來的值是-2,不符合要求,這時讓-2變254有兩種辦法:
(1)用Java自帶的方法,Byte.toUnsignedInt((byte)
-2)(ps.-2的二進製表示就是line1),這樣列印出來的就是254了
System.out.println(Byte.toUnsignedInt((byte) -2));
輸出:254
第二種方法的原理:
Java中-2的二進製表示:(這個二進制的後八位就是line1,可以直接列印的話Java把其當做了負數
-2)
Java中255的二進製表示:(24個『0』,8個『1』)
做與後變為:
這樣做與後表示的數就是正數了
254。可以想一下,假設每一行用2個位元組表示一個無符號數,那麼可以把每一行變成正整數用方法2怎麼做?
2.Java中的>>和>>>
'>>'
算術右移,向右移左邊補符號位
'>>>'
邏輯右移,向右移左邊補0
System.out.println("Java二進制-7: "+Integer.toBinaryString(-7));
System.out.println("-7>>2: "+Integer.toBinaryString(-7>>2));
System.out.println("-7>>>2: "+Integer.toBinaryString(-7>>>2));輸出:
Java二進制-7:
-7>>2:
-7>>>2: //正常應該這樣(00)左邊的兩個0不顯示
❸ java的數字二進制輸出
要是我肯定先嘗試一下,二進制以B開頭,那就b代表下看咯,不行再去查。
事實也證明是不行的,查了一下,還真沒有二進制的輸出形式。
Integer 類倒是有相應的方法:
static StringtoBinaryString(int i)
以二進制(基數 2)無符號整數形式返回一個整數參數的字元串表示形式。
System.out.print(Integer.toBinaryString(x));
❹ 跪求「java中二進制怎麼表示」
java中二進制的表示:
1、Java中定義兩個數,然後分別列印出它們的二進製表示(例如7和-7):
System.out.println("Java二進制7:"+Integer.toBinaryString(7));
System.out.println("Java二進制-7:"+Integer.toBinaryString(-7));
輸出:
Java二進制7: 111
Java二進制-7:
7的二進制就是111
-7轉化二進制的過程:
(1)把-7轉化成7,二進制是 111
(2)Java中對於不滿32位的int二進制自動補齊,所以變成了 (29個0)111
(3)然後取反 (29個1)000
(4)然後加1 (29個1)001
(4)java二進制演算法擴展閱讀:
c語言中二進制的轉換:
用函數轉換itoa(值,數組名,進制)
#include<stdio.h>
#include<stdlib.h>
voidmain()
{
char str[8];
inti=8;
itoa(i,str,2);
printf("%s",str);
}
❺ 如何用JAVA語言將十六進制數轉換成二進制數,並輸出
我的思路很簡單:
publicclass六轉2
{
publicstaticvoidmain(String[]args)
{
System.out.println(" ==========16轉二進制========== ");
init();
}//初始化!
privatestaticvoidinit()
{
//字元串形式的:16進制!
Strings="ACCC";
//字元串形式十進制--作為橋梁!
intsint=Integer.valueOf(s,16);
//十進制在轉換成二進制的字元串形式輸出!
Stringbin=Integer.toBinaryString(sint);
//輸出!
System.out.println(bin);
}
}
❻ 求java十進制轉二進制代碼
很高興回答你的問題
希望對你有幫助
Java實現十進制轉換二進制的一段代碼0
1.復制代碼package work;
2.import java.util.*;
3.public class jin{
4.public static void main(String[]args){
5.Scanner input=new Scanner(System.in);
6.int num; //聲明一個num變數用來存貯獲取鍵盤輸入的數值
7.int[] tnum=new int[10]; //聲明一個數組,用來存貯二進制的每一位數字
8.System.out.print(\"請輸入一個100以內的整數:\");
9.num=input.nextInt(); //從鍵盤獲取數值
..
.. /*循環,用來檢測輸入的數值是否大於100*/
while(num>100){
System.out.print(\"數字不能大於100!重新輸入:\");
num=input.nextInt();
}
/*循環結束*/
int n=num; //聲明n變數用並賦值輸入的值
int x=0; //聲明x變數,用來控制數組
/*循環,用來計算十進制轉換為二進制數後的每一位*/
while(n>=1){
tnum[x]=n%2; //將結果逐一存貯在數組內
n=n/2;
x++;
}
/*循環結束*/
System.out.print(num+\"轉換成二進制是:\");
x--; //這里x變數需要「--」才能與數組標簽匹配
/*for循環控制數組序列反轉輸出,從後往前*/
for(int i=x;i>=0;i--){
System.out.print(tnum[i]);
}
/*循環結束*/
}
}
❼ java中如何將十進制數字轉化成二進制
如果表達小於2^31-1的正數代碼如下:
public void binaryToDecimal(int n){
int t = 0; //用來記錄位數
int bin = 0; //用來記錄最後的二進制數
int r = 0; //用來存儲余數
while(n != 0){
r = n % 2;
n = n / 2;
bin += r * Math().pow(10,t);
t++;
}
System.out.println(bin);
}
使用字元串的拼接(+)來實現大於2^31-1的數,代碼如下:
public void binaryToDecimal(int n){
String str = "";
while(n!=0){
str = n%2+str;
n = n/2;
}
System.out.println(str);
}
可以右移後再與0x01進行&運算得到第一位的數字判斷判斷它的第幾位上是0,第幾位上是1,代碼如下:
class ByteMove
{
public static void main(String[] args)
{
int i = 7;
move(i);
}
static void move(int num){
for(int i= 0;i<6;i++){
System.out.println("第"+(i+1)+"位:" + (num >> i & 0x01));
}
}
}
❽ java中十六進制怎麼轉換為2進制
java十六進制轉換為2進制示例如下:
publicclassHex2Binary
{
publicstaticvoidmain(String[]args)
{
StringhexString="ABCD";
System.out.println(hexString2binaryString(hexString));
}
(StringhexString)
{
if(hexString==null||hexString.length()%2!=0)
returnnull;
StringbString="",tmp;
for(inti=0;i<hexString.length();i++)
{
tmp="0000"
+Integer.toBinaryString(Integer.parseInt(hexString
.substring(i,i+1),16));
bString+=tmp.substring(tmp.length()-4);
}
returnbString;
}
}
❾ 急,急急,跪求java十六進制轉換成二進制(要自己寫演算法),再把得到的二進制數取反後,在轉換成十六進制
Java程序:
public class Test29 {
public static void main(String[] args) {
String hex = "12345abcdef67890";
String bin;
bin = Transform.convertHexToBin(hex);
System.out.println(hex + " --> " + bin);
hex = Transform.convertBinToHex(bin);
System.out.println(bin + " --> " + hex);
}
}
class Transform{
private static String[] hexs = new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"a", "b", "c", "d", "e", "f"};
private static String[] bins = new String[]{"0000", "0001", "0010", "0011", "0100", "0101",
"0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
//將十進制數hex轉換為二進制數並返回
public static String convertHexToBin(String hex){
StringBuffer buff = new StringBuffer();
int i;
for(i=0; i<hex.length(); i++){
buff.append(getBin(hex.substring(i,i+1)));
}
return buff.toString();
}
//將二進制數bin轉換為十六進制數並返回
public static String convertBinToHex(String bin){
StringBuffer buff = new StringBuffer(bin);
int i;
if(bin.length()%4 != 0){//左補零
for(i=0; i<(4-bin.length()%4); i++){
buff.insert(0, "0");
}
}
bin = buff.toString();
buff = new StringBuffer();
for(i=0; i<bin.length(); i+=4){
buff.append(getHex(bin.substring(i,i+4)));
}
return buff.toString();
}
//返回十六進制數的二進制形式
private static String getBin(String hex){
int i;
for(i=0; i<hexs.length && !hex.toLowerCase().equals(hexs[i]); i++);
return bins[i];
}
//返回二進制數的十六進制形式
private static String getHex(String bin){
int i;
for(i=0; i<bins.length && !bin.equals(bins[i]); i++);
return hexs[i];
}
}
運行測試:
12345abcdef67890 -->
--> 12345abcdef67890
❿ Java:關於java的二進制與運算,下面的過程是怎麼實現的呢
你是想判斷每一位是否是1對吧,其實你可以把&某種程度看成乘法(兩個二進制數對應的位相乘,都是1則為1,有一個為0就是0),如果你想判斷一個數的二進制哪個位置上是否是1,那麼你就選定那個位置為1的那個數和這個數&連接,如
你想判斷14第二位是否是1,只需用14和這10(3)這個二進制用&連接看是否等於0,想看第三位是否是1,就用14和100這個二進制數用&連接看結果是否是0