Побитовые операции между большим и меньшим числом - PullRequest
0 голосов
/ 08 марта 2020
int main(){
 long a = -246;
 int b = -5;
 int c = a | b;
}

Приведенный выше код будет иметь эту комбинацию битов:

a = 1111111111111111111111111111111111111111111111111111111100001010
b =                                 11111111111111111111111111111011
c =                                 11111111111111111111111111111011

Так что, если работает между двумя различными битами, выбирается меньший бит, а оставшиеся биты отбрасываются? Т.е. 0s не ставится слева от b, чтобы соответствовать счету битов a?

1 Ответ

0 голосов
/ 08 марта 2020

Целочисленное продвижение происходит здесь

long a = -246;
int b = -5;
int c = (int)( a | ((long)b) ); // <- equivalent to int c = a | b;

Примечание: как упоминалось @Fredrik, если long шире, чем int.

...