потому что int a = 0b10000101
имеет только 8 бит, где вам нужно 16 или 32. Попробуйте thi:
int a = 0b10000000000000000000000000000101
, которое должно создать отрицательное число, если ваша машина 32 бита.Если это не работает, попробуйте:
int a = 0b1000000000000101
. Есть и другие способы получения отрицательных чисел:
int a = 0b1 << 31 + 0b101
или если у вас 16-битная система
int a = 0b1 << 15 + 0b101
или этот будет работать для обоих 32 или 16 бит
int a = ~0b0 * 0b101
, или это другой, который будет работать на обоих, если вы хотите получить -5
int a = ~0b101 + 1
так 0b101
5
в двоичном коде, ~0b101
дает -6
, поэтому, чтобы получить -5
, вы добавляете 1
РЕДАКТИРОВАТЬ: так как теперь я вижу, что у вас есть путаница, что такое числа со знаком и без знака, япостараюсь объяснить это как можно проще int
Так что когда у вас есть:
int a = 5;
- это то же самое, что:
signed int a = 5;
и обабыло бы позитивно.Теперь это будет так же, как:
unsigned int a = 5;
, потому что 5
- положительное число.
С другой стороны, если у вас есть:
int a = -5;
, это будетбудет таким же, как
signed int a = -5;
, но это будет не то же самое, что и:
unsigned int a = -5;
первый 2
будет -5
, третий не тот,На самом деле это было бы то же самое, если бы вы ввели 4294967291
, потому что они одинаковы в двоичной форме, но тот факт, что вы подписали без знака, означает, что компилятор будет хранить его таким же образом, но будет воспринимать его как положительное значение.