#c# #java #operators
#c# #java #операторы
Вопрос:
Где код:
c#
private void button1_Click(object sender, EventArgs e)
{
int a = -33554432;
byte b = (byte)(a >> 24);
MessageBox.Show(b.ToString());
}
java
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int a = -33554432;
byte b = (byte)(a >> 24);
JOptionPane.showMessageDialog(null, Byte.toString(b));
}
Я читал об этой проблеме, и я считаю, что есть относительно простой способ понять другое поведение, но мне нужна небольшая помощь в достижении этого понимания. Есть желающие, пожалуйста?
Большое спасибо!
РЕДАКТИРОВАТЬ: хорошо, теперь используем Byte.toString() . Вывод для c # = 254 java = -2
Комментарии:
1. Любопытно,
Integer.toString()
на байте в Java? Почему бы и нетByte.toString()
?2. Вы также могли бы предоставить нам
output
.
Ответ №1:
Java byte
подписан, поэтому >>
будет заполнять 1
биты слева, если число отрицательное.
C # byte
беззнаковый, поэтому >>
оператор заполняет 0
биты.
Либо измените byte
на sbyte
в вашем коде C #, либо используйте >>>
в Java.
Ответ №2:
Байт в Java — это значение со знаком. В этом случае вы могли бы просто использовать:
// Note the triple >
int b = a >>> 24;
Альтернативно:
byte b = (byte) (a >> 24);
int c = b amp; 0xff;
Комментарии:
1. Спасибо, Джон, альтернативная часть — это ответ. Будет помечен как таковой через минуту. >>> не работает (с указанным кодом), что было одной из причин, по которой я спросил здесь.
2. @ShunyataKharg: Когда вы говорите «>>> не работает» — что произошло, когда вы попытались? Все должно быть хорошо.
Ответ №3:
Попробуйте использовать в Java >>>
. Это приводит к битовому сдвигу без учета знакового бита.
Комментарии:
1. Я почти уверен, что нет оператора <<< .