Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace HomeWork1Kripta
- {
- class Tasks
- {
- delegate void func();
- private Delegate[] Actions = new func[]
- {
- ()=>
- {
- Console.WriteLine("1) Введите 32-разрядное число в двоичной сс");
- int number = Convert.ToInt32(Console.ReadLine(), 2);
- Console.WriteLine("Введите номер бита, который хотите увидеть");
- int j = Convert.ToInt32(Console.ReadLine());
- int iBit = ((1 << j) & number) >> j;
- Console.WriteLine($"{j}-ый бит = {iBit}");
- if(iBit == 0) Console.WriteLine($"2) Установка {j}-ого бита {Convert.ToString((1 << j) | number,2)}");
- if(iBit == 1) Console.WriteLine($"2) Снятие {j}-ого бита {Convert.ToString(~(1 << j) & number,2)}");
- Console.WriteLine("3) Введите номер i бита для перестановки ");
- int i = Convert.ToInt32(Console.ReadLine()) ;
- Console.WriteLine("Введите номер j бита для перестановки ");
- j = Convert.ToInt32(Console.ReadLine()) ;
- int withoutIJbits = number & (-1 ^ ((1 << i) | (1 << j)));
- iBit = ((1 << i) & number) >> i;
- int jBit = ((1 << j) & number) >> j;
- int res = (iBit << j) | (jBit << i) | withoutIJbits;
- Console.WriteLine($"Смена местами {i}-ого и {j}-ого бит {Convert.ToString(res,2)}");
- Console.WriteLine("4) Введите m бит которые хотите обнулить");
- int m = Convert.ToInt32(Console.ReadLine());
- Console.WriteLine($"Обнуление младших {m} бит {Convert.ToString(((-1) << m) & number,2)}");
- },
- ()=>
- {
- Console.WriteLine("Введите 32-разрядное число в двоичной сс");
- var num = Convert.ToInt32(Console.ReadLine(), 2);
- Console.WriteLine("Введите его длину");
- var len = Convert.ToInt32(Console.ReadLine());
- Console.WriteLine("Введите количество битов i:");
- var i = Convert.ToInt32(Console.ReadLine());
- Console.WriteLine("Введите количество битов j:");
- var j = Convert.ToInt32(Console.ReadLine());
- int res = ((num >> len - i) << i) | ((~((-1) << i)) & num);
- Console.WriteLine($"А)Склеенные первые {i} бит и последние {j} бит: {Convert.ToString(res,2)}");
- res = (((~((-1) << (len - i))) & num) & ((-1) << i)) >> i;
- Console.WriteLine($"Б) биты между первым {i} битом и последним {j} битом: {Convert.ToString(res,2)}");
- },
- ()=>
- {
- Console.WriteLine("Введите 32-разрядное");
- var num = Convert.ToInt32(Console.ReadLine(),2);
- Console.WriteLine(Convert.ToString(num,2));
- Console.WriteLine("Введите перестановки через пробел");
- var changesInChars = Console.ReadLine().Split(' ');
- var changes = new int[changesInChars.Length];
- for(int i =0; i <changes.Length;++i) int.TryParse(changesInChars[i],out changes[i]);
- int result = 0;
- for (int i = 0; i < 4; i++)
- {
- result |= (int)(((num & (( (Int64)1 << (8 * (i + 1))) - 1)) >> (8 * (i))) << (8 * changes[i]));
- }
- Console.WriteLine($"Смена байтов местами : {Convert.ToString(result,2)}");
- },
- ()=>
- {
- Console.WriteLine("Введите число:");
- var num = Convert.ToInt32(Console.ReadLine());
- int res = num & -num;
- Console.WriteLine($"Максимальная степень двойки числа {num} = {res}");
- },
- ()=>
- {
- Console.WriteLine("Введите число:");
- var num = Convert.ToInt32(Console.ReadLine());
- int result = -1;
- for(int numCopy = num; numCopy>0; numCopy>>=1)result++;
- Console.WriteLine($"Число p={result} 2^{result}<={num}<=2^{result+1}");
- },
- ()=>
- {
- Console.WriteLine("Введите 32-разрядное число в двоичной сс");
- var num = Convert.ToInt32(Console.ReadLine(), 2);
- string tempSTR = Convert.ToString(num, 2);
- int result = tempSTR[0]=='1' ? 1 : 0;
- for (int i = 1; i < tempSTR.Length; i++)
- {
- result ^= tempSTR[i] == '1' ? 1 : 0;
- }
- Console.WriteLine($"{Convert.ToString(num,2)}->{result}");
- //6
- },
- ()=>
- {
- //7
- //Console.WriteLine("Введите число p:");
- Console.WriteLine("Введите число");
- var num = Convert.ToInt32(Console.ReadLine(),2);
- Console.WriteLine("Введите число n,на которое хотите сдвинуть:");
- var n = Convert.ToInt32(Console.ReadLine());
- int p = -1;
- for(int numCopy = num; numCopy>0; numCopy>>=1)p++;
- // Console.WriteLine($"{Convert.ToString(num,2)}");
- p++;
- int res = (num >> n) | ((~(-1 << (n)) & num) << p-n);
- Console.WriteLine($"Циклический сдвиг вправо на {n} бит: {Convert.ToString(res,2)}");
- res= ((num << n) & ~(-1 << p)) | (((-1 << p - n) & num) >> (p-n));
- Console.WriteLine($"Циклический сдвиг влево на {n} бит: {Convert.ToString(res,2)}");
- },
- ()=>
- {
- Console.WriteLine("Введите число:");
- var num = Convert.ToInt32(Console.ReadLine(),2);
- Console.WriteLine("Введите перестановки через пробел");
- var changesInChars = Console.ReadLine().Split(' ');
- var changes = new int[changesInChars.Length];
- for(int i =0; i <changes.Length;++i) int.TryParse(changesInChars[i],out changes[i]);
- int p = -1;
- for(int numCopy = num; numCopy>0; numCopy>>=1)p++;
- p++;
- int result = 0;
- if (p==changes.Length)
- {
- for (int i = 0; i < p; i++)
- {
- result |= (((1 << i) & num) >> i) << ((p-1) - changes[i]);
- }
- Console.WriteLine($"{Convert.ToString(result,2)}");
- }
- else
- {
- throw new Exception("different sizes");
- }
- //8
- }
- };
- public Delegate this[int index]
- {
- get => Actions[index];
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement