Java — целые и двоичные числа

Попытка создать программу, в которой вы вводите двоичные числа, и вы снова получаете сумму этих двух в двоичной форме. Почему не работает код;

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)

Типичные языки программирования не позволяют вам так творчески подходить к синтаксису, в любом случае он часто будет совершенно двусмысленным.

harold 17.02.2019 10:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
131
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы хотите, чтобы ваши входные числа анализировались как двоичные, вы должны читать их как 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).

Другие вопросы по теме