當前位置:首頁 » 操作系統 » 源碼的加減法

源碼的加減法

發布時間: 2023-01-03 04:57:54

java 寫的計算器源代碼只實現加減乘除四則運算即可

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
public class calculator
{
String str1="0"; //運算數1 初值一定為0 為了程序的安全
String str2="0"; //運算數2
String fh="+"; //運算符
String jg="";//結果
//狀態開關 重要
int k1=1;//開關1 用於選擇輸入方向 將要寫入str2或 str2
int k2=1;//開關2 符號鍵 次數 k2>1說明進行的是2+3-9+8 這樣的多符號運算
int k3=1;//開關3 str1 是否可以被清0 ==1時可以 !=1時不能被清0
int k4=1;//開關4 str2 同上
int k5=1;//開關5 控制小數點可否被錄入 ==1時可以 !=1 輸入的小數點被丟掉
JButton jicunqi; //寄存器 記錄 是否連續按下符號鍵
Vector vt=new Vector(20,10);
JFrame frame=new JFrame("sunshine---計算器");
JTextField jg_TextField=new JTextField(jg,20);//20列
JButton clear_Button=new JButton("清除");
JButton button0=new JButton("0");
JButton button1=new JButton("1");
JButton button2=new JButton("2");
JButton button3=new JButton("3");
JButton button4=new JButton("4");
JButton button5=new JButton("5");
JButton button6=new JButton("6");
JButton button7=new JButton("7");
JButton button8=new JButton("8");
JButton button9=new JButton("9");
JButton button_Dian=new JButton(".");
JButton button_jia=new JButton("+");
JButton button_jian=new JButton("-");
JButton button_cheng=new JButton("*");
JButton button_chu=new JButton("/");
JButton button_dy=new JButton("=");
public static void main(String[] args)
{
calculator calculator=new calculator();
}
calculator()
{
jg_TextField.setHorizontalAlignment(JTextField.RIGHT );//文本框 右對齊
JPanel pan=new JPanel();
pan.setLayout(new GridLayout(4,4,5,5));//四行四列 邊距為5像素
pan.add(button7);
pan.add(button8);
pan.add(button9);
pan.add(button_chu);
pan.add(button4);
pan.add(button5);
pan.add(button6);
pan.add(button_cheng);
pan.add(button1);
pan.add(button2);
pan.add(button3);
pan.add(button_jian);
pan.add(button0);
pan.add(button_Dian);
pan.add(button_dy);
pan.add(button_jia);
pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));//pan對象的邊距
JPanel pan2=new JPanel();
pan2.add(jg_TextField);
JPanel pan3=new JPanel(); //為什麼要 多此一句呢? 因為我不會設置 按鈕的大小
pan3.setLayout(new FlowLayout());
pan3.add(clear_Button);
//clear_Button.setSize(10,10);//設置清零按鈕的大小 嗎的 不好使 !!
frame.setLocation(300, 200); //主窗口 出現在位置
frame.setResizable(false); //不能調大小
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(pan2,BorderLayout.NORTH);
frame.getContentPane().add(pan,BorderLayout.CENTER);
frame.getContentPane().add(pan3,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
//以上是 控制項 和 布局
//下面是事件處理 程 序
//--------------- 數 字 鍵 ----------------
class JianTing implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String ss=((JButton)e.getSource()).getText();
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if (k1==1)
{
if(k3==1)
{
str1="";
k5=1;//還原開關k5狀態
}
str1=str1+ss;
//k2=1;
k3=k3+1;
//System.out.println(str1);
jg_TextField.setText(str1);//顯示
}
else if(k1==2)
{
if (k4==1)
{
str2="";
k5=1; //還原開關k5狀態
}
str2=str2+ss;
//k2=2;
k4=k4+1;
///////////////測試////////////////
jg_TextField.setText(str2);
}
}
}

//--------符 號-----------
class JianTing_fh implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String ss2=((JButton)e.getSource()).getText();
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if(k2==1)
{
k1=2;//開關 k1 為1時,向數1寫 為2時,向數2寫
k5=1;
fh=ss2;
k2=k2+1;//按符號鍵的次數
}
else
{
int a=vt.size();
JButton c=(JButton)vt.get(a-2); if(!(c.getText().equals("+"))&&!(c.getText().equals("-"))&&!(c.getText().equals("*"))&&!(c.getText().equals("/")))
{
yuns();
str1=jg;
k1=2;//開關 k1 為1時,向數1寫 為2時,向數2寫
k5=1;
k4=1;
fh=ss2;
} k2=k2+1;
}
}
}
//--------清除-------
class JianTing_clear implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
k5=1;
k2=1;
k1=1;
k3=1;
k4=1;
str1="0";
str2="0";
fh="";
jg="";
jg_TextField.setText(jg);
vt.clear();
}
}
//----------------等 於 ---------------------
class JianTing_dy implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
yuns();
k1=1; //還原開關k1狀態
//str1=jg;
k2=1;
k3=1;//還原開關k3狀態
k4=1; //還原開關k4狀態
str1=jg; //為7+5=12 +5=17 這種計算做准備
}
}
//----------------小數點 ---------------------
class JianTing_xiaos implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if(k5==1)
{
String ss2=((JButton)e.getSource()).getText();
if (k1==1)
{
if(k3==1)
{
str1="";
k5=1; //還原開關k5狀態
}
str1=str1+ss2;
//k2=1;
k3=k3+1;
//System.out.println(str1);
jg_TextField.setText(str1);//顯示
}
else if(k1==2)
{
if (k4==1)
{
str2="";
k5=1; //還原開關k5狀態
}
str2=str2+ss2;
//k2=2;
k4=k4+1;
///////////////測試////////////////
jg_TextField.setText(str2);
}
}
k5=k5+1;
}
}
//注冊 監聽器
JianTing_dy jt_dy=new JianTing_dy();
JianTing jt= new JianTing();//臨聽數字鍵
JianTing_fh jt_fh= new JianTing_fh();//臨 聽符 號鍵
JianTing_clear jt_c=new JianTing_clear(); //清除鍵
JianTing_xiaos jt_xs=new JianTing_xiaos();// 小數點 鍵
button7.addActionListener(jt);
button8.addActionListener(jt);
button9.addActionListener(jt);
button_chu.addActionListener(jt_fh);
button4.addActionListener(jt);
button5.addActionListener(jt);
button6.addActionListener(jt);
button_cheng.addActionListener(jt_fh);
button1.addActionListener(jt);
button2.addActionListener(jt);
button3.addActionListener(jt);
button_jian.addActionListener(jt_fh);
button0.addActionListener(jt);
button_Dian.addActionListener(jt_xs);
button_dy.addActionListener(jt_dy);
button_jia.addActionListener(jt_fh);
clear_Button.addActionListener(jt_c);
//關閉事件處理程序
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
//---------------計 算------------------
public void yuns()
{
double a2,b2;//運算數1,2
String c=fh;// 運算符
double jg2=0 ;//結果
if (c.equals(""))
{
//System.out.println("請輸入運算符");
jg_TextField.setText("請輸入運算符");
}
else
{
System.out.println("str1:"+str1);//調試時 使 用
System.out.println("str2:"+str2);//調試時 使 用
System.out.println("運算符:"+fh);//調試時 使 用
if (str1.equals(".")) //字元串 "." 轉換成double型數據時 會出錯 所以手工轉
str1="0.0";
if (str2.equals("."))
str2="0.0";
a2=Double.valueOf(str1).doubleValue();
b2=Double.valueOf(str2).doubleValue();
System.out.println("double型的a2:"+a2); //調試時 使 用
System.out.println("double型的b2:"+b2); //調試時 使 用
if (c.equals("+"))
{
jg2=a2+b2;
}
if (c.equals("-"))
{
jg2=a2-b2;
}
if (c.equals("*"))
{
jg2=a2*b2;
}
if (c.equals("/"))
{
if(b2==0)
{
jg2=0;//0000000000000 by 0 cu!
}
else
{
jg2=a2/b2;
}
}
System.out.println("double型a2"+fh+"b2結果:"+jg2);
System.out.println();
jg=((new Double(jg2)).toString());
jg_TextField.setText(jg);
}
}
}

㈡ 計算機的原碼,反碼,補碼是怎麼回事可以舉例說明嗎

原碼、反碼和補碼是計算機中對數字二進制的三種表示方法。
1、原碼
原碼(true
form)是一種計算機中對數字的二進制定點表示方法。原碼表示法在數值前面增加了一位符號位(即最高位為符號位):正數該位為0,負數該位為1(0有兩種表示:+0和-0),其餘位表示數值的大小。
例如:用8位二進製表示一個數,+11的原碼為00001011,-11的原碼就是10001011。
2、反碼
反碼是數值存儲的一種,多應用於系統環境設置,如linux平台的目錄和文件的默認許可權的設置umask,就是使用反碼原理。反碼的表示方法是:正數的反碼與其原碼相同;負數的反碼是對正數逐位取反,符號位保持為1。
例如:
[+7]反=
0
0000111
B;
[-7]反=
1
1111000
B。
3、補碼
正數:正數的補碼和原碼相同。負數:負數的補碼則是符號位為「1」。並且,這個「1」既是符號位,也是數值位。數值部分按位取反後再在末位(最低位)加1。也就是「反碼+1」。
例如:
[+7]補=
0
0000111
B;
[-7]補=
1
1111001
B。
(2)源碼的加減法擴展閱讀
原碼、反碼、補碼的轉換方法如下:
(1)
已知原碼,求補碼。
例:已知某數X的原碼為10110100B,試求X的補碼和反碼。
首先通過原碼的首位確定該數字的正負,若為正數,反碼與原碼相同,補碼比原碼在末尾加1;若為負數,求其反碼時,符號位不變,數值部分按位求反;求其補碼時,再在其反碼的末位加1。
(2)已知補碼,求原碼。
按照求負數補碼的逆過程,數值部分應是最低位減1,然後取反。但是對二進制數來說,先減1後取反和先取反後加1得到的結果是一樣的,故仍可採用取反加1的方法。
參考資料來源:網路-反碼
參考資料來源:網路-補碼
參考資料來源:網路-原碼

㈢ 誰會原碼加減法幫我(好就加分)

原碼加減規則:是指操作數與運算結果均用原碼表示,運算時將尾數進行加減,符合單獨處理。

簡介

計算機中所有的數均用0,1編碼表示,數字的正負號也不例外,如果一個機器數字長是n位的話,約定最左邊一位用作符號位,其餘n-1位用於表示數值。

在符號位上用"0"表示正數;用"1"表示負數。數值位表示真值的絕對值。凡不足n-1位的,小數在最低位右邊加零;整數則在最高位左邊加零以補足n-1位。這種計算機的編碼形式叫做原碼。

㈣ 原碼,反碼,補碼。和他們之間的轉換

是原碼
不是源碼
對於整數:補碼反碼原碼都是一樣的,也就是它本身的二進制
對於負數:
原碼:絕對值的原碼,將最高為變1
反碼:絕對值的原碼按位取反
補碼:絕對值的原碼按位取反再加1

㈤ 為什麼計算機中不用源碼做加減運算

原碼就是原來的表示方法
反碼是除符號位(最高位)外取反
補碼=反碼+1
以前學習二進制編碼時,老師講了一堆堆的什麼原碼啊反碼啊補碼啊xxxx轉換啊,還有負數的表示方式啊 總是記不零清,終於從網上找到了一種比較好的講解方式,保存再share一下,不過為了系統化講解,又找來了一些編碼的基礎知識,如果只想看負數編碼記憶法,請跳轉到
1.如果你不知道二進制怎麼編碼,請繼續,否則請跳到2
1位元組 = 8位,所以它能表示的最大數當然是8位都是1(既然2進制的數只能是0或1,如果是我們常見的10進制,那就8位都為9,這樣說,你該懂了?)
1位元組的二進制數中,最大的數:11111111。
這個數的大小是多少呢?讓我們來把它轉換為十進制數。
無論是什麼進制,都是左邊是高位,右邊是低位。10進制是我們非常習慣的計數方式,第一位代表有幾個1(即幾個100),第二位代表有幾個10(即幾個101),第三位代表有幾個100(即有幾個102)…,用小學課本上的說法就是:個位上的數表示幾個1,十位上的數表示向個10,百位上的數表示幾個100……
同理可證,二進制數則是:第1位數表示幾個1 (20),第2位數表示幾個2(21),第3位數表示幾個4(22),第4位數表示向個8(23)……
以前我們知道1個位元組有8位,現在通過計算,我們又得知:1個位元組可以表達的最大的數是255,也就是說表示0~255這256個數。
那麼兩個位元組(雙位元組數)呢?雙位元組共16位。 1111111111111111,這個數並不大,但長得有點眼暈,從現在起,我們要學會這樣來表達二制數:
1111 1111 1111 1111,即每4位隔一空格。
雙位元組數最大值為:
1 * 215 + 1 *214 + 1* 213 + 1 * 212 + 1 * 211 + 1 * 210 + …… + 1 * 22 + 1 * 21 + 1* 20 = 65535
很自然,我們可以想到,一種數據類型允許的最大值,和它的位數有關。具體的計算方法方法是,如果它有n位,那麼最大值就是:
n位二進制數的最大值:1 * 2(n-1) + 1 * 2(n-2) + ... + 1 * 20
2、理解有符號數和無符號數
負數在計算機中如何表示呢?這一點,你可能聽過兩種不同的回答。
一 種是教科書,它會告訴你:計算機用「補碼」表示負數。可是有關「補碼」的概念一說就得一節課,這一些我們需要在第6章中用一章的篇幅講2進制的一切。再 者,用「補碼」表示負數,其實是一種公式,公式的作用在於告訴你,想得到問題的答案,應該如何計算。卻並沒有告訴你為什麼用這個公式就可以得到答案? -----我就是被這個弄混淆的>_<
另 一種是一些程序員告訴你的:用二進制數的最高位表示符號,最高位是0,表示正數,最高位是1,表示負數。這種說法本身沒錯,可是如果沒有下文,那麼它就是 錯的。至少它不能解釋,為什麼字元類型的-1用二進製表示是「1111 1111」(16進制為FF);而不是我們更能理解的「1000 0001」。(為什麼說後者更好理解呢?因為既然說最高位是1時表示負數,那1000 0001不是正好是-1嗎?-----re!當初偶就是這么想的,so一直在腦中打架,越打越混淆=,=)。
讓我們從頭說起。
2.1、你自已決定是否需要有正負。
就像我們必須決定某個量使用整數還是實數,使用多大的范圍數一樣,我們必須自已決定某個量是否需要正負。如果這個量不會有負值,那麼我們可以定它為帶正負的類型。
在計算機中,可以區分正負的類型,稱為有符類型,無正負的類型(只有正值),稱為無符類型。
數值類型分為整型或實型,其中整型又分為無符類型或有符類型,而實型則只有有符類型。
字元類型也分為有符和無符類型。
比如有兩個量,年齡和庫存,我們可以定前者為無符的字元類型,後者定為有符的整數類型。
2、使用二制數中的最高位表示正負。
首先得知道最高位是哪一位?1個位元組的類型,如字元類型,最高位是第7位,2個位元組的數,最高位是第15位,4個位元組的數,最高位是第31位。不同長度的數值類型,其最高位也就不同,但總是最左邊的那位(如下示意)。字元類型固定是1個位元組,所以最高位總是第7位。
(紅色為最高位)
單位元組數: 1111 1111
雙位元組數: 1111 1111 1111 1111
四位元組數: 1111 1111 1111 1111 1111 1111 1111 1111
當我們指定一個數量是無符號類型時,那麼其最高位的1或0,和其它位一樣,用來表示該數的大小。
當我們指定一個數量是有符號類型時,此時,最高數稱為「符號位」。為1時,表示該數為負值,為0時表示為正值。
3、無符號數和有符號數的范圍區別。
無符號數中,所有的位都用於直接表示該值的大小。有符號數中最高位用於表示正負,所以,當為正值時,該數的最大值就會變小。我們舉一個位元組的數值對比:
無符號數: 1111 1111 值:255 1* 27 + 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20
有符號數: 0111 1111 值:127 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20
同樣是一個位元組,無符號數的最大值是255,而有符號數的最大值是127。原因是有符號數中的最高位被挪去表示符號了。並且,我們知道,最高位的權值也是最高的(對於1位元組數來說是2的7次方=128),所以僅僅少於一位,最大值一下子減半。
不過,有符號數的長處是它可以表示負數。因此,雖然它的在最大值縮水了,卻在負值的方向出現了伸展。我們仍一個位元組的數值對比:
無符號數: 0 ----------------- 255
有符號數: -128 --------- 0 ---------- 127

同樣是一個位元組,無符號的最小值是 0 ,而有符號數的最小值是-128。所以二者能表達的不同的數值的個數都一樣是256個。只不過前者表達的是0到255這256個數,後者表達的是-128到+127這256個數。
一個有符號的數據類型的最小值是如何計算出來的呢?
有符號的數據類型的最大值的計算方法完全和無符號一樣,只不過它少了一個最高位(見第3點)。但在負值范圍內,數值的計算方法不能直接使用1* 26 + 1* 25 的公式進行轉換。在計算機中,負數除為最高位為1以外,還採用補碼形式進行表達。所以在計算其值前,需要對補碼進行還原。這里,先直觀地看一眼補碼的形式:
以我們原有的數學經驗,在10進制中:1 表示正1,而加上負號:-1 表示和1相對的負值。
那麼,我們會很容易認為在2進制中(1個位元組): 0000 0001 表示正1,則高位為1後:1000 0001應該表示-1。
然而,事實上計算機中的規定有些相反

㈥ 十進制的原碼、補碼

十進制-67的原碼是01000011、反碼是10111100和補碼是10111101。

轉換規則:

1、負整數的原碼為二進制前面加符號位;

-67=1000011(二進制)=11000011(原碼)

2、負整數的反碼=原碼各位取反(除了符號位外);

11000011(原碼)=10111100(反碼)

3、負整數的補碼=負整數的反碼+00000001;

10111100(反碼)=10111101(補碼)

(6)源碼的加減法擴展閱讀:

已知一個數的補碼,求原碼的操作其實就是對該補碼再求補碼:

⑴如果補碼的符號位為「0」,表示是一個正數,其原碼就是補碼。

⑵如果補碼的符號位為「1」,表示是一個負數,那麼求給定的這個補碼的補碼就是要求的原碼。

例:已知一個補碼為11111001,則原碼是10000111(-7)。

因為符號位為「1」,表示是一個負數,所以該位不變,仍為「1」。

其餘七位1111001取反後為0000110;再加1,所以是10000111。

熱點內容
銀行推薦演算法 發布:2025-05-10 16:57:21 瀏覽:641
2014年二級c語言真題 發布:2025-05-10 16:56:25 瀏覽:179
絕地求生進不去顯示伺服器已滿怎麼辦 發布:2025-05-10 16:56:21 瀏覽:89
存儲系統安裝工程師 發布:2025-05-10 16:53:38 瀏覽:708
php搜索分詞 發布:2025-05-10 16:53:29 瀏覽:546
8位加密 發布:2025-05-10 16:51:01 瀏覽:651
免費nvr伺服器搭建 發布:2025-05-10 16:45:20 瀏覽:847
宏傑文件夾加密怎麼樣 發布:2025-05-10 16:40:16 瀏覽:507
我的世界java伺服器種子 發布:2025-05-10 16:38:51 瀏覽:273
linux做存儲伺服器要什麼配置 發布:2025-05-10 16:26:39 瀏覽:430