Sandeep Mewara
- Продолжаю отвечать ОГ. Под побитовым и операционным подразумевается здесь:
uint a = 0b_1111_1000;
uint b = 0b_1001_1101;
uint c = a & b;
Console.WriteLine(Convert.ToString(c, toBase: 2));
// Output:
// 10011000
Цитата:
Для операндов bool оператор & вычисляет логическое и его операндов.
Унарный оператор & - это оператор адреса
Ссылаться:
Побитовые операторы и операторы сдвига - Справочник по C# | Microsoft Docs[
^]
Побитовые операторы в Java - GeeksforGeeks[
^]
Чтобы объяснить это дальше:
Цитата:
Выход побитового и равен 1, если соответствующие биты двух операндов равны 1. Если один из битов операнда равен 0, то результат соответствующего бита вычисляется равным 0.
Предположим побитовую операцию и двух целых чисел 12 и 25.
12 = 00001100 (In Binary)
25 = 00011001 (In Binary)
Bit Operation of 12 and 25
00001100
00011001
========
00001000 = 8 (In decimal)
Через код:
{
int a = 12, b = 25, c;
c = a&b;
Console.Writeline("Output = "+c); // prints Output = 8
}
Таким образом, в целом ваш n &= n-1 переводится в:
n = n & n-1
In it, value of n=5 is getting reset to:
n = number(bit(5) & bit(4))
=> n = number((0101) & (0100))
0101
0100
======
0100
=> n = number ( 0100 ) = 4
Надеюсь, это прояснит ситуацию.
lelouch_vi 2
Ух ты, спасибо тебе за это. Да, я действительно решаю задачу, где мне нужно посчитать те, что находятся в двоичном коде, скажем, 5-это 0101, ответ должен быть 2. забавно, что я могу написать функцию, чтобы получить входное число и использовать
Integer.bitcount(n)
метод упрощения вещей. Я просто знал о методе после того, как закончил задачу.