6. 位址線與記憶體空間之對等轉換系統說明

namespace Q6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void label13_Click(object sender, EventArgs e)
        {

        }

        Random rd = new Random();
        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Text = rd.Next(16, 53).ToString();
            textBox3.Text = rd.Next(1, 9) + "B";
            textBox5.Text = "";
        }

        private void button4_Click(object sender, EventArgs e)
        {
            long a = int.Parse(textBox1.Text);
            var b = int.Parse(textBox3.Text[0..^1]);

            double n = (double)Math.Pow(2, a) * b;

            textBox5.Text = conv((long)n);
        }

        string conv(long n)
        {
            if (n >= 1024L * 1024L * 1024L * 1024L)
            {
                return (n / (1024L * 1024L * 1024L * 1024L)) + "TB";
            }

            if (n >= 1024L * 1024L * 1024L)
            {
                return (n / (1024L * 1024L * 1024L)) + "GB";
            }
            if (n >= 1024L * 1024L)
            {
                return (n / (1024L * 1024L)) + "MB";


            }
            return (n / 1024L) + "KB";
        }

        private void textBox5_TextChanged(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            long val = rd.NextInt64(512, 32768L * 1024 * 1024 * 1024);
            textBox6.Text = conv(val);
            textBox4.Text = rd.Next(1, 9) + "B";

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            int b = int.Parse(textBox4.Text[..^1]);
            var t = textBox6.Text;
            long n = 0;
            if (t.EndsWith("TB"))
            {
                n = long.Parse(t[..^2]) * (long)Math.Pow(1024, 4);
            }
            if (t.EndsWith("GB"))
            {
                n = long.Parse(t[..^2]) * (long)Math.Pow(1024, 3);
            }
            if (t.EndsWith("MB"))
            {
                n = long.Parse(t[..^2]) * (long)Math.Pow(1024, 2);
            }
            if (t.EndsWith("KB"))
            {
                n = long.Parse(t[..^2]) * (long)Math.Pow(1024, 1);
            }

 textBox2.Text =Math.Ceiling(Math.Log2(n / b)).ToString();
        }
    }
}

Last updated