#java
#java
Вопрос:
У меня проблема с преобразованиями разных типов. В моем коде я пытаюсь использовать байты, а затем преобразовать их в целое число, чтобы иметь возможность записывать количество бит x из целого числа в хранилище определенного типа.
Проблема в том, что когда у меня есть отрицательное число в виде байта, и я преобразую его в целое число, битовое представление в виде целого числа имеет все начальные биты, установленные как 1. Поэтому, когда я пытаюсь сохранить, например, 10 бит из целого числа, я получаю начальные биты как 1 вместо 0, как я ожидал.
Есть ли способ переинтерпретировать байт как целое число, сохранив при этом битовое представление неизменным? Мне не нужно заботиться о фактическом числовом значении целого числа.
Из C я привык иметь значения без знака, которые предотвратили бы эту проблему, но теперь я не понимаю, как справиться с этим в java, ограниченном целыми числами со знаком.
Пример:
/*
decimal: -28
as byte: 11100100
as integer: 11111111111111111111111111100100
needed/expected integer: 00000000000000000000000011100100
*/
import java.util.*;
import java.lang.*;
import java.io.*;
class MyClass
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(Integer.toBinaryString((byte)-28));
}
}
Комментарии:
1. Что значит, что вы хотите сохранить битовое представление таким же, но вас не волнует числовое значение? Это одно и то же.
2. «Есть ли способ переинтерпретировать байт как целое число, сохранив при этом битовое представление таким же» — вы можете интуитивно представить операцию, которую вы пытаетесь выполнить, как «сохранение битового представления таким же», но на самом деле это не так. У int есть куча битов, которых у байта просто нет, и заполнение этих битов нулями не означает «сохранение битового представления таким же», как и расширение знака.
3. @Zarwan Идея состоит в том, чтобы сохранить только биты, установленные в целом числе, которые установлены в байте. Когда это будет сделано, числовое значение / интерпретация целого числа будет отличаться от того, каким был байт.
Ответ №1:
yourInt = yourByte amp; 255;
Просто замаскируйте нежелательные биты.