Огледално обръщане на битовете на дадено число
Здравейте!
Ако може някой да ми даде пример как се обръща огледално реда на битовете на дадено число. Например : 1110 0001 --> 1000 0111
Здравейте!
Ако може някой да ми даде пример как се обръща огледално реда на битовете на дадено число. Например : 1110 0001 --> 1000 0111
1-ви вариант:
string input ="hello world"
string output =""
for (int i = input.Length - 1; i >= 0; i--)
{
output += input[i];
}
2-ри вариант - правиш го на charArray и използваш функцията reverse!
string input = "hello world"
char[] inputarray =input.ToCharArray();
Array.Reverse(inputarray);
string output=new.string(inputarray);
3-ти вариант - LINQ :
string input = "hello world";
string output = new string(input.ToCharArray().Reverse().ToArray());
ETO вариант с побитов метод ....
Това е за 8-битово число (short) ...
Лесно може да го адаптираш за по-голямо число
Ако си зациклил може да погледнеш как го правят лекторите в някое от видеата от март - тази задача (ако става дума за същата) я решават там. Секцията е "Подготовка за изпит".
Иначе има два варианта, които съм пробвал и работят. Ще опиша накратко логиката.
1) Със стринг - ако на изпита не се сетиш по друг начин, може и така, но дотогава ти препоръчвам да опитваш да го направиш с битови операции. Идеята е да обърнеш числото в двоичното му представяне, което е стринг, и след това да си направиш нов стринг, в който с цикъл да му набуташ в обратен ред символите на първия стринг. Накрая втория стринг го обръщаш пак в число.
2) С битови операции (както си трябва). Имаш две числа, вход и резултат. В цикъл, хващаш входното число, взимаш последния бит и го добавяш към резултата, като резултата го изместваш предварително веднъж наляво. След това входа го местиш веднъж надясно, за да вземеш следващия бит и цикълът се завърта наново. Цикълът трябва да спре, когато входното число стане 0.
Май доста зле го обясних, на хартия ако пробваш може да ти се изясни логиката, която описвам. Не искам да ти пействам код, защото смятам, че е по-полезно човек сам като се помъчи и намери решението, за да осмисли нещата по-добре.
Относно втория ти вариант ще го представя с код (ако това имаш в предвид):
int numberToReverse = 160;
int reversedNumber = 0;
while (numberToReverse > 0)
{
int extractedBit = numberToReverse & 1;
reversedNumber = reversedNumber << 1;
reversedNumber = reversedNumber | extractedBit;
numberToReverse = numberToReverse >> 1;
}
Console.WriteLine(reversedNumber);
numberToReverse съдържа стойността на числото, което искаш да "обърнеш".