Попытка создать программу, в которой вы вводите двоичные числа, и вы снова получаете сумму этих двух в двоичной форме. Почему не работает код;
import java.util.Scanner;
class ABC{
public static void main(String[] args){
Scanner toy = new Scanner(System.in);
int x = toy.nextInt();
int y = toy.nextInt();
x = 0bx; y=0by; ------------> ERROR SHOWS UP
int z = x + y;
System.out.println(Integer.toBinaryString(z));
}
}
Сообщение об ошибке гласит:
binary numbers must contain at least one binary digit
';' expected
Идеальный пример:
x = 101 (integer) --> x = 5 (binary meaning of 101)
y = 10 (integer) --> y = 2 (binary meaning of 10)
z = x + y = 5 + 2 = 7
return binary form of 7 (111)




Если вы хотите, чтобы ваши входные числа анализировались как двоичные, вы должны читать их как Strings и анализировать до int в системе счисления 2:
int x = Integer.parseInt(toy.next(),2);
int y = Integer.parseInt(toy.next(),2);
int z = x + y;
System.out.println(Integer.toBinaryString(z));
Что касается вашей ошибки:
x = 0bx; y=0by;
недопустимый синтаксис. Префикс 0b позволяет вам вводить числовые литералы, которые будут рассматриваться как двоичные литералы (например, x = 0b1001;), но вы не можете комбинировать его с переменной.
Вы написали 0bx, что было бы хорошим программным трюком, если бы он работал. Это не так, как вы испытали на себе.
Чтобы понять почему, вам нужно знать, что написанный вами код сначала интерпретируется как единое целое и транслируется компилятором в программу в машинном коде. В принципе, компилятор может понять, что вы пытались сказать выражением 0bx. Просто язык программирования Java не позволяет использовать это выражение.
Он говорит что-то похожее на:
A binary literal is written by
0b, followed by only 0 and 1, at least one and as many as possible.
Слово «литерал» означает что-то, связанное с буквами, «как написано». Поэтому вы не можете использовать эту часть языка программирования.
Но есть еще одна часть. Метод Integer.parseInt имеет 2 варианта: Integer.parseInt("12345") преобразует десятичное представление числа в это число. Вариант Integer.parseInt("101110101101", 2) анализирует двоичное представление числа в это число.
Если есть метод toy.nextInt(2), вы можете использовать его. В противном случае вы должны использовать Integer.parseInt(toy.next(), 2).
Типичные языки программирования не позволяют вам так творчески подходить к синтаксису, в любом случае он часто будет совершенно двусмысленным.