Про целочисленные типы
Apr. 5th, 2016 10:38 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Интересно, что количество бит в самом большом целочисленном типе, поддерживаемом современными компиляторами (int128_t), уже сравнялось с максимальным значением самого маленького (signed char).
Это к вопросу о том, как интерпретировать x << -1.
Мне пришли в голову две «естественные» интерпретации:
1. x << -1 = x >> 1.
2. x << -1 = x<< ((usigned что-то)-1) = x << 255 или x << 65535 и так далее.
В обоих случаях 1 << -1 = 0.
Но не все компиляторы с этим согласны. (понятно что по стандарту это undefined behavoir).
Это к вопросу о том, как интерпретировать x << -1.
Мне пришли в голову две «естественные» интерпретации:
1. x << -1 = x >> 1.
2. x << -1 = x<< ((usigned что-то)-1) = x << 255 или x << 65535 и так далее.
В обоих случаях 1 << -1 = 0.
Но не все компиляторы с этим согласны. (понятно что по стандарту это undefined behavoir).
no subject
Date: 2016-04-05 12:18 pm (UTC)>То есть НЕ СЛЕДУЕТ ВООБЩЕ употреблять "данных низкого уровня" и обрабтку "низкого уровня" при написании программ (на любом языке, высокого ли уровня или нет - не важно)?
Где я это сказал ?
Я просил привести пример оправданного прменения булевой арифметики в современной программе.
> Умный дом? С автоапдейтящимися прошивками в железках, ога. Спасибо. Через 5 лет, после смены таймзоны и апдейта прошивки под оную смену (например) - что будете делать (реальный случай - размер буфера под выдаваемой некоторой прошивкой текстовое представление времени оказался недостаточен при изменении наименования таймзоны, в результате - атака по переполнению стека и креш системы)? А что будет делать клиент, если автор программы "высокого уровня" в одном из контроллеров успел помереть?
В моем случае, клиент будет лежать в гробу, глубоко безразличный к проблеме, тк умный дом он строит для себя сам. :-)
В стандартном - свяжется с саппортом, или (если это будет очень умный клиент :-) соберет нужную прошивку сам из открытых исходников.
Вообще, мне кажется, термин прошивка не совсем применим к современным устройствам. Правильнее говорить про ОС и прикладной софт. Соответственно, нормальный процесс исправления ошибок в прикладном софте. Как вариант - зайти на контроллер ssh-м и обновить соответствующий пакет.
Но как это все связано с изначальным разговором про булеву арифметику, мне не очень понятно.
> Правда, зачем думать о низком уровне? Давайте писать на высоком и не думать вообще. :)
Ну, как бы, да. Мир к тому идет. В частности, Вашими усилиями. Нет ?
no subject
Date: 2016-04-05 12:38 pm (UTC)Почти любая реализация видеокодеков.
Содержательная обработка данных с конкретного железа.
При соответствующе документированном протоколе.
no subject
Date: 2016-04-05 12:41 pm (UTC)По дороге сам вспомнил про криптографию :-)
no subject
Date: 2016-04-05 03:10 pm (UTC)Компактные сетевые протоколы с быстрым парсингом, кстати. Типа CBOR. Она там примитивная, но есть, и обеспечивает компактность.
Когда данных надо передать МНОГО, компактность протокола ой, важна...
no subject
Date: 2016-04-05 03:33 pm (UTC)AreaLink[area_off] |= here_mask1;
AreaLink[area_off] &= here_mask0;
area_off - понятное дело, адрес байта. :)