计算机组成原理逻辑运算

计算机组成原理逻辑运算
计算机组成原理逻辑运算

组成原理课程设计说明书

计算机组成原理算法实现(三)

专业计算机科学与技术

学生姓名

班级

学号

指导教师

完成日期

1 课程设计目的

本课程设计是在学完本课程教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的计算机组成原理课程基本知识,进一步领会计算机组成原理的一些算法,并进行具体实现,提高分析问题、解决问题的综合应用能力。

2 课程设计内容与要求

内容:计算机组成原理算法实现(五)

要求:课题③能够实现逻辑运算(逻辑非、逻辑加、逻辑乘、逻辑异)、定点整数的单符号位补码加减运算、定点整数的原码一位乘法运算和浮点数的加减运算。

3 功能模块详细设计

3.1 主窗体设计

系统进入(主)窗体的设计:菜单需要在输入口令正确后方可激活使用。口令输入错误时要给出重新输入口令的提示,三次口令输入错误应该禁止使用。具体现实如下:

窗体由visual studio 2017 中c#窗体设计中的各种UI插件完成,如label、button、textbox、messagebox等插件组合完成,在插件的使用中还可以改变字体背景大小颜色,例如我插入了图片,label背景颜色为透明。插件还可以输入口令后直接回车进入

在进入此页面后,未显示任何菜单栏选项,只有正确输入口令后方可进入菜单窗体进行能使用,三次失败后便立即退出,此处用到了if(equal())语句,只有密码相等才可以效果图如下:

这些弹窗均由messagebox插件完成。

3.2菜单窗体

这些便是这次实验设计的所完成的主要功能,包括逻辑运算、定点整数的补码加减,定点整数的原码乘法,浮点数的加减运算.此外,窗体的交替由 hide()和show()方法表示。

3.3 逻辑运算窗体设计

逻辑运算分为逻辑加、逻辑非,逻辑乘和逻辑异,即上课所学的交非并异或四种逻辑运算,主要由textbox插件接收输入的数字,然后通过if语句判断进行结果输出,如非运算就是“1”→“0”,“0”→“1”,通过数组遍历,一个一个往后检查直至全部替换完毕,逻辑乘即是并,逻辑非关键代码如下所示:

if (a[i] == '0') d[i] = '1';

if (a[i] == '1') d[i] = '0';

}

c = new string(d);

通过实体化具体输出后进行数组遍历改变,同理其余的逻辑运算只需要加上if 语句条件,结果效果如下图所示:

另外,输入按钮由foucus()函数控制,点击输入后无论鼠标原来在哪,都会重新在第一行,返回依然是hide() 和show()函数,即隐藏此页面,显示菜单窗体。

3.4 定点整数的单符号位加减运算

加减运算通过求出原码反码补码然后利用补码进行加法运算,运用到了自定义函数,附于附录之中。首先定义原码函数,即将符号位换位0或1表示,接着运用if函数进行取反,最后判断最后一位求出补码。效果图如下

如果是减法的话,便是求出第二个数相反数的补码,再次相加,此时再自定义三个函数,唯一区别在于原码,即如果是“+”是“0”,而“-”是“1”,最后补码套用加法函数这样:

this.no4.Text=(AddBinary(BM(FM(YM(this.no1.Text))),BM(FM(JYM(this.no2.Te xt)))));效果图如下:

3.5 定点整数的原码乘法窗体设计

定点整数原码的乘法,是基于加法之上的,在进行每一次求积的过程时,都需要将乘积保存下来,按照我的设计思路,实现方法如下所述:

首先,创建BYM()函数,这个函数的目的是将带符号的定点整数化为原码进行此后的运算,然后开始一位一位的进行乘法运算,最后,乘法的关键,自定义了一个乘法函数YMYWmultip(),自己理解的位置的关系进行加法,最后,通过逻辑异或运算,即同号为0,保证结果的符号正确。

3.6 浮点数的加减运算窗体设计

浮点数的加减运算是上课时老师一步一步做的,在实现这个功能时,逻辑是与写题时相同的,首先将阶码和尾数变成原码,接着反码、补码。第一步,对阶,第一个数和第二个数进行对阶,产生偏移量改变阶码,第二步,尾数求和,尾数的补码相加,第三步,规格化,再次产生偏移量,改变阶码,继而进行尾数处理,最后,判断溢出。再次让补码变成原码输出。而减法不同的便是尾数求和这一步,原理与前面的单符号位加减运算相同,区别在于符号位由一位变为两位。以上均要判断正负溢出,具体在代码之中,效果图如下:

3.7 窗体的美观设计

在c#窗体设计中,有许多可以美观优化的地方,这些均可以使用插件的属性进行设计改变。如:

颜色,字体大小,名称,背景图片都可以在这一栏进行设计,比如,我在插件background中插入图片,其余插件为透明色,边框为粉红,窗体弹出设为居中,使窗体更美观简洁。

4 设计小结

这次计算机组成原理课设大大提升了我的c#编程能力,原先没有掌握的的数据类型转换,基本函数也在大脑中留下了记忆,在这次实验中,同学们积极讨论,使自己对于补码和浮点数的相关知识得到了夯实巩固,其原理得到了理解,感谢于同学的帮助,原先我们大部分是编程控制台代码,这一次,是窗体设计,受益良多,自身又得到了提高。

参考文献

[1] 白中英. 计算机组成原理(第五版)[M]. 北京: 科学出版社, 2010.

[1] 明日科技. c#从入门到精通(第三版)[M]. 北京: 清华大学出版社, 2010.

附录代码

主窗体代码

public partial class Form1 : Form

{

int n = 3;

public Form1()

{

InitializeComponent();

}

private void groupBox1_Enter(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

string kl = this.textBox1.Text;

if (kl.Equals(""))

{

n--;

MessageBox.Show("口令不能为空!你还有" + n + "次机会");

}

else

{

if (kl.Equals("111"))

{

MessageBox.Show("登录成功!");

new Form7().Show();

this.Hide(); }

else

{

n--;

MessageBox.Show("口令错误!你还有"+n+"次机会");

}

}

if (n < 1) { this.Close(); }

}

private void

textBox1_TextChanged(object sender, EventArgs e) {

}

private void Form1_Load(object sender, EventArgs e)

{

}

}

菜单代码:

public partial class Form7 : Form

{

public Form7()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

new Form2().Show();

this.Hide();

}

private void button2_Click(object sender, EventArgs e)

{

new Form3().Show();

this.Hide();

}

private void button3_Click(object sender, EventArgs e)

{

new Form4().Show();

this.Hide();

}

private void button4_Click(object sender, EventArgs e)

{

new Form5().Show();

this.Hide();

}

private void Form7_Load(object sender, EventArgs e)

{ }}

逻辑运算窗体代码:

namespace WindowsFormsApp1

{

public partial class Form2 : Form

{

public Form2()

{

InitializeComponent();

}

private void label2_Click(object sender, EventArgs e)

{

}

private void button6_Click(object sender, EventArgs e)

{

new Form7().Show();

this.Hide();

}

private void button1_Click(object sender, EventArgs e)

{

no1.Focus();

}

private void label1_Click(object sender, EventArgs e)

{

}

private void button2_Click(object sender, EventArgs e) {

string a = this.no1.Text;

char[] b = a.ToCharArray();

string c = this.ans.Text;

int l = this.no1.Text.Length;

char[] d = new char[l];

for (int i = 0; i < l; i++)

{

if (b[i] != '0' && b[i] != '1') {

MessageBox.Show("只能输入

0或1");

}

else

{

if(a[i] == '0') d[i] = '1';

if(a[i] == '1') d[i] = '0'; }

c = new string(d);

this.ans.Text = c;

}

}

private void button3_Click(object sender, EventArgs e)

{

string a = this.no1.Text;

char[] b = a.ToCharArray();

string c = this.ans.Text;

string f = this.no2.Text;

char[] g = f.ToCharArray();

int l = this.no1.Text.Length;

char[] d = new char[l];

for (int i = 0; i < l; i++)

{

if (b[i] != '0' && b[i] != '1') {

MessageBox.Show("只能输入

0或1");

}

else

{

if(a[i]=='0'&& g[i]=='0') d[i] = '0';

else d[i] = '1';

}

}

c = new string(d);

this.ans.Text = c;

}

private void button4_Click(object sender, EventArgs e)

{

string a = this.no1.Text;

char[] b = a.ToCharArray();

string c = this.ans.Text;

string f = this.no2.Text;

char[] g = f.ToCharArray();

int l = this.no1.Text.Length;

char[] d = new char[l];

for (int i = 0; i < l; i++)

{

if (b[i] != '0' && b[i] != '1') {

MessageBox.Show("只能输入

0或1");

}

else{ if (a[i] == '1' && g[i] == '1') d[i] = '1';

else d[i] = '0'; }

}

c = new string(d);

this.ans.Text = c;

}

private void button5_Click(object sender, EventArgs e)

{

string a = this.no1.Text;

char[] b = a.ToCharArray();

string c = this.ans.Text;

string f = this.no2.Text;

char[] g = f.ToCharArray();

int l = this.no1.Text.Length;

char[] d = new char[l];

for (int i = 0; i < l; i++)

{

if (b[i] != '0' && b[i] != '1') { MessageBox.Show("只能输入

0或1");

}

else

{

if(a[i] == g[i]) d[i] = '0';

else d[i] = '1';

}

}

c = new string(d);

this.ans.Text = c;

}

private void no1_TextChanged(object sender, EventArgs e)

{

}

private void Form2_Load(object sender, EventArgs e)

{

} }}

定点整数的单符号位补码加减运算窗体:

namespace WindowsFormsApp1

{

public partial class Form3 : Form

{

public Form3()

{

InitializeComponent();

}

public string YM(string n)

{

string ym;

if (n.Substring(0, 1) == "+")

{

//输入的是正数,符号位输出0

ym = "0" + n.Substring(1,

n.Length - 1);

}

else if (n.Substring(0, 1) == "-") {

ym = "1" + n.Substring(1,

n.Length - 1);

}

//输入的是负数,符号位输出1

else

{

MessageBox.Show("请输入符号");

return"数据出错!";

}

return ym;

}

public string JYM(string n)

{

string jym;

if (n.Substring(0, 1) == "+")

{

//输入的是正数,符号位输出0

jym = "1" + n.Substring(1,

n.Length - 1);

}

else if (n.Substring(0, 1) == "-") {

jym = "0" + n.Substring(1,

n.Length - 1);

}

//输入的是负数,符号位输出1

else

{

MessageBox.Show("请输入符号");

return"数据出错!";

}

return jym;

}

public string JFM(string jym)

{

string jfm = jym.Substring(0, 1);

if (jym.Substring(0, 1) == "0")

{

//输入的是正数

jfm = jym;

}

else if(jym.Substring(0, 1) == "1") {

for (int i = 1; i < jym.Length; i++)

{

if (jym.Substring(i, 1) == "0") jfm = jfm + "1";

else if(jym.Substring(i, 1) == "1") jfm = jfm + "0";

}

}

return jfm;

}

public string FM(string ym)

{

string fm=ym.Substring (0,1);

if (ym.Substring(0, 1) == "0")

{

//输入的是正数

fm=ym;

}

else if (ym.Substring(0, 1) == "1") {

for(int i=1;i

if (ym.Substring(i, 1) == "0") fm = fm + "1";

else if(ym.Substring(i, 1) == "1") fm = fm + "0";

}

}

return fm;

}

private static string AddBinary(string a, string b)

{

//找出最长的加1,留1位进位

var max = Math.Max(a.Length,

b.Length) + 1;

//按总长度补位,以便统一处理,否则要考虑边界

var a2 = a.PadLeft(max, '0');

var b2 = b.PadLeft(max, '0');

//定义list存中间计算结果

var list = new List();

//进位标志

var carryFlag = false;

for (int i = max - 1; i >= 0; i--) {

var add =

int.Parse(a2[i].ToString()) +

int.Parse(b2[i].ToString());

//计算当前位的值,如果之前进位

标志为真,则额外+1

if (carryFlag) add++;

//大于等于2时,此时仍然需要进位,带入下一次循环

carryFlag = add >= 2;

//存入中间计算结果

list.Add(add % 2);

}

//定义结果

var res = string.Empty;

//反转,list是按逆序从低位到高位的 list.Reverse();

//遍历输出到res

list.ForEach(r => { res +=

r.ToString(); });

//取消最高位0

res = res.Substring(1, res.Length - 1);

//res = res.TrimStart('0');

//如果空了,返回0

if (res.Length == 0) res = "0";

//返回结果

return res;

}

public string BM(string fm)

{

string bm = fm.Substring(0, 1);

if (fm.Substring(0, 1) == "0")

{

//输入的是正数

bm = fm;

}

else if (fm.Substring(0, 1) == "1") {

if(fm.Substring(fm.Length - 1, 1) == "0") bm = fm.Substring (0,fm.Length -1) + "1";

else if(fm.Substring(fm.Length - 1, 1) == "1") bm = AddBinary(fm, "1");

}

return bm;

}

public string JBM(string jfm)

{

string jbm = jfm.Substring(0, 1);

if (jfm.Substring(0, 1) == "0")

{

//输入的是正数

jbm = jfm;

}

else if(jfm.Substring(0, 1) == "1") {

if (jfm.Substring(jfm.Length - 1, 1) == "0") jbm = jfm.Substring (0,jfm.Length -1) + "1";

else if

(jfm.Substring(jfm.Length - 1, 1) == "1") jbm = AddBinary(jfm, "1");

}

return jbm;

}

private void label5_Click(object sender, EventArgs e)

{

}

private void label3_Click(object sender, EventArgs e)

{

}

private void button4_Click(object sender, EventArgs e)

{

new Form7().Show();

this.Hide();

}

private void button1_Click(object sender, EventArgs e)

{

no1.Focus();

}

private void Form3_Load(object sender, EventArgs e)

{

}

private void no1_TextChanged(object sender, EventArgs e)

{

}

private void button2_Click(object sender, EventArgs e )

{

this.no3.Text =

AddBinary(BM(FM(YM(this.no1.Text))),

BM(FM(YM(this.no2.Text))));

}

private void no4_TextChanged(object sender, EventArgs e)

{

}

private void button3_Click(object sender, EventArgs e)

{

/*

MessageBox.Show(YM(this.no1.Text)); MessageBox.Show(FM(YM(this.no1.Text))); MessageBox.Show(BM(FM(YM(this.no1.Text)))); MessageBox.Show(YM(this.no2.Text)); MessageBox.Show(FM(YM(this.no2.Text)));

MessageBox.Show(BM(FM(YM(this.no2.Text))));*/

this.no4.Text =

(AddBinary(BM(FM(YM(this.no1.Text))),

BM(FM(JYM(this.no2.Text)))));

}

}

}

定点整数的原码乘法

public static string BYM(string n)//无符号原码 {

string ym;

if (n.Substring(0, 1) == "+")

{

//输入的是正数,符号位输出0

ym = n.Substring(1, n.Length - 1);

}

else if (n.Substring(0, 1) == "-") {

ym = n.Substring(1, n.Length - 1);

}

//输入的是负数,符号位输出1

else

{

MessageBox.Show("请输入符号");

return"数据出错!";

}

string temp = ym.Substring(0, 1);

if (ym.Length < 8)

{

for(int m = 1; m <= 8 - ym.Length; m++)

{

temp = temp + "0";

}

}

return ym;

}

public string YMYWmultip(string bcym, string cym)

{

int bclen = bcym.Length;

int clen = cym.Length;

string sum = "0";

//string []sum = new string[] { };

for (int i = clen - 1; i >= 0; i--) {

if (cym.Substring(i, 1) == "1") {

//MessageBox.Show(bcym.PadRight(bclen + clen - i - 1, '0'));

sum = AddBinary(sum, bcym.PadRight(bclen + clen - i - 1, '0'));

}

}

return sum;

}

private static string AddBinary(string a, string b)

{

//找出最长的加1,留1位进位

var max = Math.Max(a.Length,

b.Length) + 1;

//按总长度补位,以便统一处理,否则要考虑边界

var a2 = a.PadLeft(max, '0');

var b2 = b.PadLeft(max, '0');

//定义list存中间计算结果

var list = new List();

//进位标志

var carryFlag = false;

for (int i = max - 1; i >= 0; i--) {

var add =

int.Parse(a2[i].ToString()) +

int.Parse(b2[i].ToString());

//计算当前位的值,如果之前进位标志为真,则额外+1

if (carryFlag) add++;

//大于等于2时,此时仍然需要进位,带入下一次循环

carryFlag = add >= 2;

//存入中间计算结果

list.Add(add % 2);

}

//定义结果

var res = string.Empty;

//反转,list是按逆序从低位到高位的 list.Reverse();

//遍历输出到res

list.ForEach(r => { res +=

r.ToString(); });

//取消最高位0

res = res.TrimStart('0');

//如果空了,返回0

if (res.Length == 0) res = "0";

//返回结果

return res; }

private void button3_Click(object sender, EventArgs e)

{

new Form7().Show();

this.Hide();

}

private void

textBox1_TextChanged(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

no1.Focus();

}

private void button2_Click(object sender, EventArgs e)

{

ans.Text = YMYWmultip(BYM(no1.Text), BYM(no2.Text));

bool cf1 = true, cf2 = true;

if(no1.Text.Substring(0, 1) == "+") {

cf1 = true;

}

else if(no1.Text.Substring(0, 1) == "-") cf1 = false;

if(no2.Text.Substring(0, 1) == "+") {

cf2 = true;

}

else if(no2.Text.Substring(0, 1) == "-") cf2 = false;

if (cf1 ^ cf2 == true)

{

ans.Text = "-" + ans.Text;

}

else ans.Text = "+" + ans.Text;

}

}

}

浮点数的加减运算

namespace WindowsFormsApp1

{

public partial class Form5 : Form

{

public Form5()

{

InitializeComponent();

}

public static string AddBinary(string a, string b)

{

//找出最长的加1,留1位进位

var max = Math.Max(a.Length, b.Length) + 1;

//按总长度补位,以便统一处理,否则要考虑边界

var a2 = a.PadLeft(max, '0');

var b2 = b.PadLeft(max, '0');

//定义list存中间计算结果

var list = new List();

//进位标志

var carryFlag = false;

for (int i = max - 1; i >= 0; i--) {

var add = int.Parse(a2[i].ToString()) + int.Parse(b2[i].ToString());

//计算当前位的值,如果之前进位标志为真,则额外+1

if (carryFlag) add++;

//大于等于2时,此时仍然需要进位,带入下一次循环

carryFlag = add >= 2;

//存入中间计算结果 list.Add(add % 2);

}

//定义结果

var res = string.Empty;

//反转,list是按逆序从低位到高位的 list.Reverse();

//遍历输出到res

list.ForEach(r => { res += r.ToString(); });

//取消最高位0

//res = res.TrimStart('0');

//如果空了,返回0

if (res.Length == 0) res = "0";

//返回结果

return res;

}

public static string BXYM(string n)//变形原码

{

string ym;

if (n.Substring(0, 1) == "+")

{

//输入的是正数,符号位输出0

ym = "00" + n.Substring(1, n.Length - 1);

}

else if (n.Substring(0, 1) == "-") {

ym = "11" + n.Substring(1, n.Length - 1);

}

//输入的是负数,符号位输出1

else if (n.Substring(0, 2) == "01" || n.Substring(0, 2) == "10")

{

ym = "11" + n.Substring(2, n.Length - 2);

} //正溢出或负溢出

else if (n.Substring(0, 2) == "11" || n.Substring(0, 2) == "00")

{

ym = n;

}

else

{

MessageBox.Show("请输入符号"); return "数据出错!";

}

string temp = ym.Substring(0, 2); if (ym.Length < 8)

{

for (int m = 1; m <= 8 - ym.Length; m++)

{

temp = temp + "0";

}

ym = temp + ym.Substring(2, ym.Length - 2);

}

return ym;

}

public static string BXFM(string ym)//变形反码

{

string fm = ym.Substring(0, 2);

if (ym.Substring(0, 2) == "00")

{

//输入的是正数

fm = ym;

}

else if (ym.Substring(0, 2) == "11") {

for (int i = 2; i <= ym.Length - 1; i++)

{

if (ym.Substring(i, 1) == "0")

{

fm = fm + "1";

}

else if (ym.Substring(i, 1) == "1") fm = fm + "0";

}

}

//输入的是负数

else

{

MessageBox.Show("请输入符号"); return "数据出错!";

}

return fm;

}

public static string BXBM(string fm) //变形补码

{

string bm = fm.Substring(0, 2);

if (fm.Substring(0, 2) == "00")

{

bm = fm;

}

else if (fm.Substring(0, 2) == "11") {

if (fm.Substring(fm.Length - 1, 1) == "0")

{

bm = fm.Substring(0, fm.Length - 1) + "1";

}

else

{

bm = AddBinary(fm, "1");

}

}

return bm;

}

public static string AddBinaryF(string input1, string input2)

{

int strlen = Math.Max(input1.Length, input2.Length) + 1;

string output;

output = AddBinary(BXBM(BXFM(BXYM(input1))),

BXBM(BXFM(BXYM(input2))));

if (output.Length > strlen)

{

//MessageBox.Show("过长溢出"); output = output.Substring(output.Length - strlen, strlen);

}

if (output.Substring(0, 2) == "01") {

//正溢出

output = BXBM(BXFM(BXYM(output)));

if (output.Length > strlen)

{

//MessageBox.Show("过长溢出");

output = output.Substring(output.Length - strlen, strlen);

}

MessageBox.Show("存在正溢出,计算补码结果");

output = "00" + output.Substring(2, output.Length - 2);

}

else if (output.Substring(0, 2) == "10")

{

//负溢出

output = BXBM(BXFM(BXYM(output)));

if (output.Length > strlen)

{

//MessageBox.Show("过长溢出");

output = output.Substring(output.Length - strlen, strlen);

}

MessageBox.Show("存在负溢出,计算补码结果");

output = "11" + output.Substring(2, output.Length - 2);

}

else if (output.Substring(0, 2) == "11")

{

//负溢出

output = BXBM(BXFM(BXYM(output)));

if (output.Length > strlen)

{

//MessageBox.Show("过长溢出");

output = output.Substring(output.Length - strlen, strlen);

}

MessageBox.Show("结果为负,计算

补码结果");

output = "11" + output.Substring(2, output.Length - 2);

}

return output;

}

private void label2_Click(object sender, EventArgs e)

{

}

private void TextBox1_TextChanged(object sender, EventArgs e)

{

}

private void button4_Click(object sender, EventArgs e)

{

new Form7().Show();

this.Hide();

}

private void button1_Click(object sender, EventArgs e)

{

no1.Focus();

}

private void button2_Click(object sender, EventArgs e)

{

string e1, e2, m1, m2, m0, e0; string m1r = "", m2r = "";

int strlen, erm = 0, mlm = 0;

string em = "";

string inputcl = "";

int e10, e20, e00;

if (no3.Text.Substring(0, 1) == "+") {

inputcl = "-" + (no3.Text.Substring(1, no3.Text.Length - 1)); }

else if (no3.Text.Substring(0, 1) == "-")

{

inputcl = "+" + (no3.Text.Substring(1, no3.Text.Length - 1)); }

//e1 = BXBM(BXFM(BXYM(no1.Text))); //e2 = BXBM(BXFM(BXYM(inputcl))); strlen = Math.Max(no1.Text.Length, no3.Text.Length) + 1;

//e0 = AddBinary(e1, e2);

//MessageBox.Show(e0.Length +"|"+strlen);

//if (e0.Length > strlen)

//{ e0 = e0.Substring(e0.Length - strlen, strlen); }

m1 = no2.Text.Substring(3, 6);

m2 = no4.Text.Substring(3, 6);

e1 = Form4.BYM(no1.Text);

e2 = Form4.BYM(no3.Text);

if (no1.Text.Substring(0, 1) == "+") {

e10 = System.Convert.ToInt32(e1, 2) * 1;

}

else e10 = System.Convert.ToInt32(e1, 2) * -1;

if (no3.Text.Substring(0, 1) == "+")

{

e20 = System.Convert.ToInt32(e2, 2) * 1;

}

else e20 = System.Convert.ToInt32(e2, 2) * -1;

e00 = e10 - e20;

if (e00 >= 0)

{

em = no1.Text;

erm = e00;

MessageBox.Show("阶码对齐,e1大,e2偏移量:" + erm);

}

else

{

em = no3.Text;

erm = e00 * -1;

MessageBox.Show("阶码对齐,e2大,e1偏移量:" + erm);

}

//for (int i = 0; i <= erm; i++)

//{

if (em == no1.Text)

{

m2r = m2.Substring(m2.Length - erm, erm);

m2 = m2.Substring(0, m2.Length - erm);

MessageBox.Show(m2);

m2 = m2.PadLeft(6, '0');

MessageBox.Show(m2 + "(" + m2r + ")");

}

else

{

m1r = m1.Substring(m1.Length - erm, erm); m1 = m1.Substring(0, m1.Length - erm);

MessageBox.Show(m1);

m1 = m1.PadLeft(6, '0');

MessageBox.Show(m1 + "(" + m1r + ")");

}

m1 = no2.Text.Substring(0, 1) + m1; m2 = no4.Text.Substring(0, 1) + m2; //MessageBox.Show(m1);

//MessageBox.Show(m2);

m0 = AddBinary(BXBM(BXFM(BXYM(m1))), BXBM(BXFM(BXYM(m2))));

//MessageBox.Show(m0);

if (m0.Length > 8)

{

//MessageBox.Show("过长溢出"); m0 = m0.Substring(m0.Length - 8, 8);

}

if (m0.Substring(0, 2) == "01")

{

//正溢出

m0 = BXBM(BXFM(BXYM(m0)));

if (m0.Length > 8)

{

//MessageBox.Show("过长溢出");

m0 = m0.Substring(m0.Length - 8, 8);

}

MessageBox.Show("存在正溢出,计算补码结果:" + m0);

m0 = "00" + m0.Substring(2, m0.Length - 2);

mlm = m0.Substring(2, m0.Length - 2).IndexOf('1');

相关主题
相关文档
最新文档