Проблема с Java заключается в том, что int
- это то, что было бы int32_t
в c ++, а long
- это int64_t
, нет неподписанных типов.
Это означает, что вы должны взятьэто дополняет два, поэтому, когда установлен верхний бит, у вас есть -2 ^ 64.
Если вы заботитесь только о наборе битов, вам не следует печатать длинные напрямую.Сделайте что-то вроде этого:
for (int i = 0; i < 64; i++) {
System.out.println((l & (1 << i)) != 0 ? "Bit " + i + " is set" : "Bit " + i + " is not set");
}
Редактировать: Хорошо, пока проблема не в этом, я оставлю ответ ради полноты (потому что это действительно подводные камни для рассмотрения)