TGViewer
Грамота от Кузьмича Грамота от Кузьмича @java_ot_kuzmicha · 208 subscribers
Post #28 242
Грамота от Кузьмича Присылаю вам пламенный привет🔥💌 с прошедшей конференции Dump из Питера! На конфе было круто - есть треки докладов по фронт, бек-разработке, менеджменту и тестированию. (А вот в Питере сейчас не круто - дубак и ветруган🥶) Доклады огонь, спикеры топ, но сегодня…
Ну и окей, нам то че с того? Вот мы с вами когда пользуемся операторами +,-,*,/ - никогда не паримся, просто держим в голове что если числа с которыми мы делаем вычисления будут слишком большими - надо будет или делать до вычисления какую-нибудь проверку, или работать с long/BigInteger, или с Math.addExact(), тут джекичанских путей решения этой задачи хватает. В чем тогда бага этой строки?
val = val | (1 << j);

Если представить это выражение чисто в виде используемых типов - проблема станет очевиднее (нет):
long = long | (int << int);
Целевой тип с которым мы работаем - long. А в части (1 << j) - мы получаем результат int, который воткнется в проблему переполнения раньше чем long. Поэтому что бы поправить ошибку - в коде надо явно указать что побитовый сдвиг мы делаем для long:
val = val | (1L << j);

Похожая ошибка на более простом кейсе - как если написать код:
int a = ...; //любое значение
long result = 2 * a; //результат умножения - int

И расстраиваться почему это у нас для больших чисел некорректно идет умножение. Фикс:
long result = 2L * a; //результат умножения - long

Выводы. Их несколько.

- Математика, типы, циклы и условия - только и ждут чтобы поиметь вас, поэтому знайте врага в лицо и будьте бдительны:)
- Баги встречаются везде, даже в крупнейших проектах. Тесты и автотесты - самое годное оружие против них. Напиши автотест - сделай мир лучше!
  • 🔥 4
  • ❤ 1
  • 🙏 1
More from @java_ot_kuzmicha
  1. Jul 28, 2026Добавляю краски в музыку🟥🟨🟦🟧🟩 Пришла мне тут шальная мысль - что если каждый альбом к…
  2. Dec 10, 2025Более жизовые итоги чем эти ваши я.музыка или спотифаи. Кстати, че бы еще вы добавили в та…
  3. Nov 24, 2025уже пора?🤔 тренды все-таки
  4. Nov 19, 20253 из 25 - это не про лото и не про биатлон. Для тех кто пропустил релиз Java 25 - смотрим…
  5. Nov 1, 2025в рабочую субботу законодательно запрещены посты на серьезные темы. поэтому вот вам веселы…
  6. Oct 9, 2025Достал такое из почтового ящика. Скажите, кто вызывал таких мастеров - а с деплоем в прод…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →