2016-02-20 2 views
1

Что случилось с моим кодом? Следующий код работал для целочисленного типа данных, но не мог работать для байтового типа данных.Java: Арифметическая операция по байту

public class Exchange { 
    public static void main(String[] args) { 
    //int a = 23, b = 44; 
    byte a = 23, b = 44; 
    a = a + b; 
    b = a - b; 
    a = a - b; 
    System.out.println("a=" + a + "b=" + b); 
    } 
} 

Я знаю, что тип данных байт может содержать данные о диапазоне от -2^(8-1) -1 + 2^(8-1). Но я использую 23 & 44, поэтому он меньше 127.

Здесь я получил сообщение об ошибке «несовместимые типы: возможное преобразование с потерями из int в байт».

+0

И если вы складывали 'а = 127' и' B = 127' будет ли результат соответствовать одному байту? –

+0

Этот вопрос решен! Спасибо @stackoverflow! –

+0

@NawinMandal Используйте клавиши Alt + Enter, это поможет вам показать вам способ. В вашем случае я просто скопировал ваш код и выполнил арифметическую операцию перед запуском этого приложения. – ersks

ответ

0

Просто закиньте результат вашей арифметической операции байта следующим образом:

public class Exchange { 
    public static void main(String[] args) { 
    //int a = 23, b = 44; 
    byte a = 23, b = 44; 
    a = (byte) a + b; 
    b = (byte) a - b; 
    a = (byte) a - b; 
    System.out.println("a=" + a + "b=" + b); 
    } 
} 

Совет: - Используйте Alt + Enter намеков

+1

http://stackoverflow.com/questions/14125843/basic-arithmetic-operations-on-int-java объясняет, почему происходит расширение при арифметике. – user508633

+0

@ersks Спасибо, господин, за вашу помощь! Это сработало для меня. –

+0

Это нормально @NawinMandal! – ersks

1

Если вы хотите выполнить арифметическую операцию на byte и назначьте его обратно переменной byte, вы должны явно сообщить компилятору, что «вы знаете, что делаете», иначе вы получите ошибку, по которой вы теряете информацию, путем преобразования int (результат арифметической операции) до byte (с левой стороны).

Чтобы исправить это, отлитый результат арифметической операции обратно в байт:

byte a = 23, b = 44; 
    a = (byte) (a + b); 
    b = (byte) (a - b); 
    a = (byte) (a - b); 
+0

Спасибо! У меня уже есть ответ. –

0

Исправленный код находится здесь

public static void main(String[] args) { 
    //int a = 23, b = 44; 
    byte a = 23, b = 44; 
    a = (byte) (a + b); 
    b = (byte) (a - b); 
    a = (byte) (a - b); 
    System.out.println("a=" + a + "b=" + b); 
} 
+0

У меня уже есть ответ от @ersks –

Смежные вопросы