任意N位二進位制的補碼實現 佇列存放

2022-01-21 06:22:11 字數 1887 閱讀 1827

正在學習計算機組織與結構,為了寫一些底層的算術操作模擬,比如乙個二進位制補碼數的加減乘除,發現這很麻煩,因為不管是什麼語言,都只提供了8位、32、64位等部分位數的補碼形式,那麼怎麼實現任意任意位的補碼整數呢,由於我們不能利用現有的如byte、integer類,所以我們需要乙個容器來儲存我們自己編寫的任意位的補碼整數。

陣列可以實現,但是陣列移位可能比較麻煩,比如如果要實現二進位制數的算術右移,必須要移動大部分元素。可以使用鍊錶,雖然獲取二進位制數某一位的值比較麻煩,但是還是比陣列可能更好一點。於是,我們採用基於鍊錶的佇列。

/**

* created by xutao on 2018/12/1 15:26

* 作用:儲存乙個n位二進位制數,並實現左右移動、取反、求值等操作

/

public class binaryqueue 

}public binaryqueue(string binary)

}public void shiftleft()

temp = temp.next;}}

public void shiftright()

temp.next =null;

}public void shiftrightarithmetically()

temp.next =null;

}public binaryqueue reverse()

return bq;

}public binaryqueue add(binaryqueue bq)

string s_this = getstr();

for (int j =0 ;j

if (j

arr_this[j] = head.next.value;

}else }}

else

string s_bq = bq.getstr();

for (int j =0 ;j

if (j

arr_bq[j] = bq.head.next.value;

}else }}

//相加

int res = new int[len];

int carry = 0; //上一次加的進製

for (int i = len-1;i>=0;i--)

else if (res[i]==3)

else carry = 0;

}string str = "";

for (int i =0;i

str+=res[i];

}return new binaryqueue(str);

}public binaryqueue subtract(binaryqueue bq)

public binaryqueue getoppositenumber()

s+="1";

return reverse().add(new binaryqueue(s));//加一

}public int getint()

return integer.valueof(getstr(),2);

}public void set(int index,int value)

temp.value = value;

}public string getstr()

return str;

}public int getlast()

return temp.value;

}public static void main(string args)

//節點類

}class node

public int getvalue()

}

有了我們自己定義的任意的n位補碼二進位制數,那麼我們可以實現一些計算機底層的模擬了,比如布思演算法等等。

二進位制補碼

二進位制補碼 計算機儲存資料都是以0,1二進位制進行儲存。對於有符號整數儲存 對於浮點數待續 引入補碼概念。原碼即直接將真值轉換為其相應的二進位制形式,而反碼和補碼是對原碼進行某種轉換編碼方式。對於正整數,原碼,反碼和補碼都相一樣 對於負整數,補碼等於反碼加1,而反碼等於原碼除符號位不變其他位按位求...

二進位制補碼

計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的是十進位制,正如 亞里斯多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手指頭這個解剖學事實的結果.儘管在歷史上手指計數 5,10進製 的實踐要比二或三進製計數出現的晚.摘自 數學發展史 有空大家可以看看哦...

二進位制補碼

二進位制補碼主要是為了解決負整數的加減法運算 減法轉化為加法 原碼表示法就是用二進位制的最高位表示符號,0表示正數,1表示負數。以8位為例 1就是表示為0000 0001,1表示為1000 0001.而補碼的規則是正整數保持不變,針對負整數,除符號位外,其他位全部取反,然後 1。注 負整數中,原碼轉...