Невозможно нормализовать мантиссу числа, записанного в естественной форме. Нормализация применяется для хранения чисел с плавающей запятой в таких форматах, как IEEE754 (он же Float) или Double. Структура разрядной сетки такого формата: [знак числа][смещенный порядок][нормализованная мантисса со скрытой единицей]. Если твоя задача сводится к нормализации сетки до мантиссы вида 1.ххх, это говорит о том, что ты приводишь мантиссу к формату, пригодному именно для хранения числа типа Float. Тогда в твоем примере это будет выглядеть так: 00111001000100100000000000000000 - нули слева убираем: 111001000100100000000000000000 - нормализуем мантиссу: 1.11001000100100000000000000000 х 2^29. Теперь мантисса нормализована.
Если требуется разместить Float-запись этого числа, нужно сделать так: 1. [знак числа] - 1 бит: 0, если число положительное. 2. [смещенный порядок] - 8 бит: порядок числа + 127 (т.е. он никогда не бывет отрицательным, что избавляет нас от необходимости хранить отдельно знак порядка - в этом весь прикол формата IEEE754) 3. [нормализованная мантисса со скрытой единицей] - 23 бита: хранит нормализованную мантиссу. Поскольку мантисса всегда будет начинаться с 1.ххх, единицу мы не пишем, чтобы сэкономить один разряд. ИТОГО: число в формате Float имеет точность 5-6 десятичных знаков и занимает 4 байта (32 бита) памяти.
Итак: [0][10011100][11001000100100000000000], итого, мы получили число в формате Float, где: [10011100] = 127 + 29 = 156(10) = 10011100(2), а из мантиссы мы взяли только первые 23 разряда, скрыв единицу. В данном случае число такое, что мы справа теряем только часть нулей, поэтому оно перевелось в Float без потерь значащих разрядов. Будь у нас мантисса, наподобие этой: 1.11001000100100001000100001001 - часть разрядов мы бы потеряли, поскольку данная мантисса просто не влезла бы целиком в 23 разряда.
static void Main(string[] args)
{
int N = 0;
Console.Write("Введите размерность массива: ");
N = Convert.ToInt32(Console.ReadLine());
double[,] mas = new double[N, N];
double sum = 0;
int viborStroki = 0;
Console.Write("Введите номер строки: ");
viborStroki = Convert.ToInt32(Console.ReadLine());
Random rnd = new Random();
for(int i = 0; i < N; i++)
{
for(int j = 0; j<N; j++)
{
mas[i, j] = rnd.Next(0, 10);
}
}
for (int i = viborStroki - 1; i < viborStroki; i++)
{
for(int j = 0; j < N; j++)
{
sum += Math.Pow(mas[i, j], 2);
}
}
Console.WriteLine();
Console.Write("Массив: ");
Console.WriteLine();
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
Console.Write(String.Format("{0,3}", mas[i, j]));
}
Console.WriteLine();
}
Console.Write("Сумма квадратов элементов {0}-й строки = ", viborStroki);
Console.Write("{0}", sum);
Console.ReadKey();
}
Объяснение:
Вводим размерность массива, вводим номер строки, программа считает сумму квадратов элементов введённой строки.
Тогда в твоем примере это будет выглядеть так:
00111001000100100000000000000000 - нули слева убираем:
111001000100100000000000000000 - нормализуем мантиссу:
1.11001000100100000000000000000 х 2^29.
Теперь мантисса нормализована.
Если требуется разместить Float-запись этого числа, нужно сделать так:
1. [знак числа] - 1 бит: 0, если число положительное.
2. [смещенный порядок] - 8 бит: порядок числа + 127 (т.е. он никогда не бывет отрицательным, что избавляет нас от необходимости хранить отдельно знак порядка - в этом весь прикол формата IEEE754)
3. [нормализованная мантисса со скрытой единицей] - 23 бита: хранит нормализованную мантиссу. Поскольку мантисса всегда будет начинаться с 1.ххх, единицу мы не пишем, чтобы сэкономить один разряд.
ИТОГО: число в формате Float имеет точность 5-6 десятичных знаков и занимает 4 байта (32 бита) памяти.
Итак:
[0][10011100][11001000100100000000000], итого, мы получили число в формате Float, где:
[10011100] = 127 + 29 = 156(10) = 10011100(2),
а из мантиссы мы взяли только первые 23 разряда, скрыв единицу.
В данном случае число такое, что мы справа теряем только часть нулей, поэтому оно перевелось в Float без потерь значащих разрядов. Будь у нас мантисса, наподобие этой:
1.11001000100100001000100001001 - часть разрядов мы бы потеряли, поскольку данная мантисса просто не влезла бы целиком в 23 разряда.