Bitwise operations или "Какво е това 6 | 5 ?"


0

Драги колеги,

На почивката между лекциите тази седмица един колега ме попита: "Какво е това 6 | 5 ?".

Трябва да призная, че и на мен побитовите операции не са ми сила, за това поствам два линка :

http://www.codeproject.com/Articles/544990/Understand-how-bitwise-operators-work-Csharp-and-V

http://www.codeproject.com/Articles/1544/Bit-wise-operations-in-C

в търсене на най - добрия.

Когато се пейства адрес май нещо можеше да се реже накрая ?




Отговори



0
Другата седмица ще бъдат обяснени в лекцията Оператори и изрази, а за по-нетърпеливите има 3 видеа от миналия курс тук: https://telerikacademy.com/Courses/Courses/Details/144

от topalkata (6442 точки)


0
 След изрешаване на няколко задачи с побитови маски всичко си идва на мястото. Мисля, че за побитовите операции е най-важно човек да си представя визуално поредиците от битовете. Най-важно е да може да се взема бит на дадена позиция и да се сменя бит на дадена позиция.

от ivan.mihov1 (4988 точки)


0

Така е, а на мен най-лесно ми е да си вкарам битовете на числото в един масив и после всичко е много лесно - смяна на бит, проверка даден бит дали е 0 или 1 итн.

Например за 8-битово число (0 - 255):

               int[] array = new int[8];

                int input = int.Parse(Console.ReadLine());
                string inputBin = Convert.ToString(input, 2);
                string inputBin1 = inputBin.PadLeft(8, '0');
                for (int i = 0; i < 8; i++)
                {
                    array[i] = int.Parse(inputBin1[i].ToString());
                }
Така за числото 5 получаваме масив [0, 0, 0, 0, 0, 1, 0, 1] и по-натам в програмата лесно можем да манипулираме всеки бит.

Принципът е същият и за по-големи числа.


от topalkata (6442 точки)

1

 Като за начало е добре. Но в един момент се научи да работиш без масив. Масива ти е performance killer - създава се обект и се заделя памет. На битовите операции най-доброто е, че работят директно върху числото в стека на микропроцесорно ниво - т.е. много бързи.

 Та при манипулация на 2/3 числа с масив, дори и long няма да има голяма разлика - Но ако създадеш 100000 такива масива започваш да губиш излишна памет(може би и скорост)


от ivan.mihov1 (4988 точки)


0
Колега относно линковете, юоже да ги правиш с хиперлинк и така няма да заема цели параграфи а просто думата която си му задал. Поздрави. 

от ivanovcorp (175 точки)