Пример #1
0
        public static string ObterExpoente8bit(bool[] binario)
        {
            string binarioS = "";
            string expoente = "";

            binarioS = Conversores.BoolParaString(binario);
            expoente = binarioS.Substring(1, 8);

            return(expoente);
        }
Пример #2
0
        public static string ObterMantissa23bit(bool[] binario)
        {
            string binarioS = "";
            string mantissa = "";

            binarioS = Conversores.BoolParaString(binario);
            mantissa = binarioS.Substring(9, 23);

            return(mantissa);
        }
Пример #3
0
        public static string ObterSinal1Bit(bool[] binario)
        {
            string binarioS = "";
            string sinal    = "";

            binarioS = Conversores.BoolParaString(binario);
            sinal    = binarioS.Substring(0, 1);

            return(sinal);
        }
Пример #4
0
        // arredontar binário somando 1 a mantissa
        public static string ArredondarBinario(string binario)
        {
            if ((binario[binario.Length - 1] == '1') && (binario[binario.Length - 2] == '1'))
            {
                bool[] Binario    = Conversores.StringParaBool(binario, 24);
                bool[] arredondar = new bool[24];
                bool   overflow   = false;

                arredondar[22] = true;
                Somador32Bit somador   = new Somador32Bit();
                bool[]       resultado = somador.Somador(Binario, arredondar, ref overflow, false);
                return(Conversores.BoolParaString(resultado).Substring(0, 23));
            }

            return(binario.Substring(0, 23));
        }
Пример #5
0
        private void circularButton_converter_Click(object sender, EventArgs e)
        {
            try
            {
                decimalA = float.Parse(textBoxNumero1.Text);
                decimalB = float.Parse(textBoxNumero2.Text);
            }
            catch
            {
                MessageBox.Show("Digite um número válido", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            bool[] A                = Conversores.PontoFlutuanteParaBinario(decimalA);
            string binarioA         = Conversores.BoolParaString(A);
            string hexaDecimalA     = Conversores.BinarioParaHexa(binarioA);
            string sinalA           = ManipularBinario.ObterSinal1Bit(A);
            string expoenteBinarioA = ManipularBinario.ObterExpoente8bit(A);
            int    expoenteA        = Conversores.BinarioParaDecimal(ManipularBinario.ObterExpoente8bit(A), 8) - 127;
            string mantissaA        = ManipularBinario.ObterMantissa23bit(A);

            bool[] B                = Conversores.PontoFlutuanteParaBinario(decimalB);
            string binarioB         = Conversores.BoolParaString(B);
            string hexaDecimalB     = Conversores.BinarioParaHexa(binarioB);
            string sinalB           = ManipularBinario.ObterSinal1Bit(B);
            string expoenteBinarioB = ManipularBinario.ObterExpoente8bit(B);
            int    expoenteB        = Conversores.BinarioParaDecimal(ManipularBinario.ObterExpoente8bit(B), 8) - 127;
            string mantissaB        = ManipularBinario.ObterMantissa23bit(B);

            textBoxSinal1.Text    = sinalA;
            textBoxExpoente1.Text = expoenteBinarioA;
            textBoxMantissa1.Text = mantissaA;
            textBoxHexa1.Text     = hexaDecimalA;

            textBoxSinal2.Text    = sinalB;
            textBoxExpoente2.Text = expoenteBinarioB;
            textBoxMantissa2.Text = mantissaB;
            textBoxHexa2.Text     = hexaDecimalB;
        }
Пример #6
0
        // Converte um binário IEEE754 para decimal
        public static double BinarioFlutuanteParaDecimal(bool[] binario)
        {
            string sinal        = "";
            string expoente     = "";
            string mantissa     = "";
            double expoenteReal = 0;

            sinal        = ManipularBinario.ObterSinal1Bit(binario);
            expoente     = ManipularBinario.ObterExpoente8bit(binario);
            expoenteReal = Conversores.BinarioParaDecimal(expoente, 8) - 127;

            mantissa = ManipularBinario.ObterMantissa23bit(binario);

            double parteFlutuante = 0;

            for (double i = 0; i < mantissa.Length; i++)
            {
                if (mantissa[(int)i] == '0')
                {
                    parteFlutuante += 0 * Math.Pow(2.0, (i + 1) * (-1));
                }
                else
                {
                    parteFlutuante += 1 * Math.Pow(2.0, (i + 1) * (-1));
                }
            }

            if (sinal[0] == '0')
            {
                parteFlutuante = (1 + parteFlutuante) * Math.Pow(2.0, expoenteReal);
            }
            else
            {
                parteFlutuante = ((1 + parteFlutuante) * Math.Pow(2.0, expoenteReal) * -1);
            }

            return(parteFlutuante);
        }
Пример #7
0
        public static string ComplementoDe2(string mantissa)
        {
            ComplementoDe2 complemento = new ComplementoDe2();
            bool           overflow    = false;

            bool[] mantissaBool = Conversores.StringParaBool(mantissa, 24);
            bool[] Um           = Conversores.StringParaBool("00000000000000000000001", 24);

            for (int i = 0; i < mantissaBool.Length; i++)
            {
                if (mantissaBool[i] == true)
                {
                    mantissaBool[i] = false;
                }
                else
                {
                    mantissaBool[i] = true;
                }
            }

            mantissaBool = complemento.complemento2(mantissaBool, Um, ref overflow);

            return(Conversores.BoolParaString(mantissaBool).PadRight(24, '0'));
        }
Пример #8
0
        public void Soma(float decimalA, float decimalB, bool soma, string sinal)
        {
            Somador32Bit somador32 = new Somador32Bit();
            Somador8Bit  somador8  = new Somador8Bit();



            bool overflow = false;

            bool[] A            = Conversores.PontoFlutuanteParaBinario(decimalA);
            string binarioA     = Conversores.BoolParaString(A);
            string hexaDecimalA = Conversores.BinarioParaHexa(binarioA);
            string sinalA       = ManipularBinario.ObterSinal1Bit(A);

            int    expoenteA     = Conversores.BinarioParaDecimal(ManipularBinario.ObterExpoente8bit(A), 8) - 127;
            string mantissaA     = ManipularBinario.ObterMantissa23bit(A);
            string expoenteFinal = "";
            int    deslocar      = 0;

            bool[] resultadoSomaMantisas = null;

            bool[] B            = Conversores.PontoFlutuanteParaBinario(decimalB);
            string binarioB     = Conversores.BoolParaString(B);
            string hexaDecimalB = Conversores.BinarioParaHexa(binarioB);
            string sinalB       = ManipularBinario.ObterSinal1Bit(B);
            int    expoenteB    = Conversores.BinarioParaDecimal(ManipularBinario.ObterExpoente8bit(B), 8) - 127;
            string mantissaB    = ManipularBinario.ObterMantissa23bit(B);

            // se os dois número forem iguais a zero
            if ((decimalA == decimalB) && (decimalA == 0))
            {
                textBoxResultadoNumero.Text = "0";
                textBoxSinalR.Text          = "0";
                textBoxExpoenteR.Text       = "00000000";
                textBoxMantissaR.Text       = "00000000000000000000000";
                textBoxHexa.Text            = "0x00000000";
            }
            else if (decimalA == 0)
            {
                textBoxResultadoNumero.Text = decimalB.ToString();
                textBoxSinalR.Text          = ManipularBinario.ObterSinal1Bit(B);
                textBoxExpoenteR.Text       = ManipularBinario.ObterExpoente8bit(B);
                textBoxMantissaR.Text       = ManipularBinario.ObterMantissa23bit(B);
                textBoxHexa.Text            = Conversores.BinarioParaHexa(binarioB);
            }
            else if (decimalB == 0)
            {
                textBoxResultadoNumero.Text = decimalA.ToString();
                textBoxSinalR.Text          = ManipularBinario.ObterSinal1Bit(A);
                textBoxExpoenteR.Text       = ManipularBinario.ObterExpoente8bit(A);
                textBoxMantissaR.Text       = ManipularBinario.ObterMantissa23bit(A);
                textBoxHexa.Text            = Conversores.BinarioParaHexa(binarioB);
            }
            else
            {
                mantissaA = ManipularBinario.Adicionar1(mantissaA);
                mantissaB = ManipularBinario.Adicionar1(mantissaB);

                if (expoenteB > expoenteA)
                {
                    expoenteFinal = ManipularBinario.ObterExpoente8bit(B);
                    deslocar      = Math.Abs(expoenteA - expoenteB);
                    mantissaA     = ManipularBinario.Deslocamento(mantissaA, deslocar);
                }
                else if (expoenteA > expoenteB)
                {
                    expoenteFinal = ManipularBinario.ObterExpoente8bit(A);
                    deslocar      = Math.Abs(expoenteB - expoenteA);
                    mantissaB     = ManipularBinario.Deslocamento(mantissaB, deslocar);
                }
                else if (expoenteA == expoenteB)
                {
                    expoenteFinal = ManipularBinario.ObterExpoente8bit(A);
                }

                if (soma == false)
                {
                    mantissaB = ManipularBinario.ComplementoDe2(mantissaB);
                }

                bool[] BinarioA = Conversores.StringParaBool(mantissaA, 24);
                bool[] BinarioB = Conversores.StringParaBool(mantissaB, 24);
                resultadoSomaMantisas = somador32.Somador(BinarioA, BinarioB, ref overflow, soma);

                string somaMantissas = Conversores.BoolParaString(resultadoSomaMantisas);
                //somaMantissas = ManipularBinario.AlinhaResultadoMantissa(somaMantissas);
                somaMantissas = ManipularBinario.Remover1(somaMantissas);

                if (overflow == true && soma == true)
                {
                    expoenteFinal = Conversores.BoolParaString(somador8.Somador(Conversores.StringParaBool(expoenteFinal, 8), Conversores.StringParaBool("00000001", 8), ref overflow));
                }
                else if (overflow == true && soma == false)
                {
                    //somaMantissas = ManipularBinario.NormalizarAposSoma(somaMantissas, ref expoenteFinal);
                }

                somaMantissas = ManipularBinario.ArredondarBinario(somaMantissas);

                string IEEE754_Binario = ManipularBinario.Gerar_IEEE754(sinal, expoenteFinal, somaMantissas);
                string IEEE754_Hexa    = Conversores.BinarioParaHexa(IEEE754_Binario);

                bool[] resultado = Conversores.StringParaBool(IEEE754_Binario, 32);

                sinal = ManipularBinario.ObterSinal1Bit(resultado);
                string expoente = ManipularBinario.ObterExpoente8bit(resultado);
                string mantissa = ManipularBinario.ObterMantissa23bit(resultado);

                textBoxResultadoNumero.Text = Conversores.BinarioFlutuanteParaDecimal(resultado).ToString();
                textBoxSinalR.Text          = sinal;
                textBoxExpoenteR.Text       = expoente;
                textBoxMantissaR.Text       = mantissa;
                textBoxHexa.Text            = IEEE754_Hexa;
            }
        }
Пример #9
0
        // converte um número float para binário no formato IEEE754
        public static bool[] PontoFlutuanteParaBinario(float flutuante)
        {
            // .TrimStart(new Char[] { '0' } remove zeros a esquerda da string

            float  numeroF        = 0;
            int    parteInteira   = 0;
            float  parteFlutuante = 0;
            char   sinal;
            string binarioInteiro            = "";
            string binarioFlutuante          = "";
            int    expoente                  = 0;
            int    expoentePolarizado        = 0;
            string expoentePolarizadoBinario = "";
            string mantissa                  = "";
            string flutuanteNormalizado      = "";
            string binarioFinal              = "";

            numeroF = flutuante;

            if (numeroF < 0)
            {
                sinal    = '1';
                numeroF *= -1;
            }
            else
            {
                sinal = '0';
            }

            parteInteira   = (int)numeroF;
            parteFlutuante = numeroF - parteInteira;

            binarioInteiro = Conversores.InteiroParaBinario(parteInteira, 32).TrimStart(new Char[] { '0' });

            if (parteFlutuante > 0)
            {
                binarioFlutuante = Conversores.FlutuanteParaBinario(parteFlutuante);
            }

            if (parteInteira > 0)
            {
                expoente           = binarioInteiro.Length - 1;
                expoentePolarizado = (binarioInteiro.Length - 1) + 127;
                mantissa           = (binarioInteiro + binarioFlutuante).Remove(0, 1);
            }
            else if (parteInteira == 0 && parteFlutuante == 0)
            {
                expoentePolarizado = 0;
            }
            else
            {
                flutuanteNormalizado = binarioFlutuante.TrimStart(new Char[] { '0' });
                flutuanteNormalizado = flutuanteNormalizado.Remove(0, 1);

                expoente           = -(binarioFlutuante.Length - flutuanteNormalizado.Length);
                expoentePolarizado = (127 - (binarioFlutuante.Length - flutuanteNormalizado.Length));
                mantissa           = flutuanteNormalizado;
            }

            expoentePolarizadoBinario = Conversores.InteiroParaBinario(expoentePolarizado, 8);

            binarioFinal = sinal + expoentePolarizadoBinario + mantissa;

            bool[] IEEE754 = Conversores.StringParaBool(binarioFinal, 32);

            return(IEEE754);
        }