Первое, |=
- соединение побитовое ИЛИ. a |= b
эквивалентен a = a | b
, где каждый результирующий бит будет установлен, если установлен этот бит в a
или b
(или оба).
Вот таблица истинности, которая применяется к каждому биту:
a | b | result
--------------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1
Во-вторых, <<=
то же самое, но вместо побитового или, это немного сдвиг влево. Остальные биты ALl перемещаются влево на эту сумму, а справа заполняется 0 с.
101 << 1 == 1010
110 << 2 == 11000
final
такое же, как C++ с помощью const
определения переменной. Если, однако, вы хотите предотвратить переопределение функции, вы можете пометить final
в конце заголовка функции, если функция также является виртуальной функцией (которую она должна была бы быть переопределена в первую очередь) , Однако это относится только к C++ 11. Вот что я имею в виду: example.
Наконец, >>>
называется оператором unsigned right shift
на Java. Обычно >>
будет сдвигать биты, но оставить левый бит целым, чтобы сохранить знак числа. Иногда это может быть не так, как вы хотите. >>>
будет постоянно помещать 0, вместо того, чтобы предполагать, что знак важен.
В C++, однако, signed
- это актуальность, которая является частью типа переменной. Если переменная подписана, >>
будет сдвигаться вправо, как это делает Java, но если переменная не определена, она будет действовать как оператор без сдвига вправо (>>>
) на Java. Следовательно, C++ имеет только потребность в >>
, так как он может вывести, что делать.
Этот код ничего не делает; нет заявления о возврате. –
И | = и << = идентичны в Java и C++, а «final» в «static final long» ничего не делает. Здесь нет никаких вопросов. –
EJP
Этот код более или менее бесполезен в C++. C++ уже имеет встроенный 'unsigned int', поэтому нет необходимости использовать массив байтов. если у вас есть переменная 'unsigned int x;', и вам нужно преобразовать ее в 'long', вы просто выполните:' long y = (long) x; ', что намного проще. – Matt