Re[7]: Что вы думаете о Rust?
От: CRT  
Дата: 05.09.23 08:56
Оценка: +2
Здравствуйте, CreatorCray, Вы писали:

CRT>>Он не понимает почему байт, даже знаковый, беззнаково расширенный до unsigned int

CC>Ещё раз: ЗНАКОВОЕ, расширенное до бОльшего колва бит.

а мы говорим об интуитивности. А так-то понятно что всё описано в 1000+ страниц спецификации С++.

Вот ты так понимаешь: "ЗНАКОВОЕ, расширенное до бОльшего колва бит."
а кто-то понимает так "если я преобразую в беззнаковый тип, какого хрена он знаковый бит размножает??"

в java похожие приколы
byte b=(byte)0xff;
b>>>=1;

получаем тот же 0xff в b
Что за хрень? (был когда-то вопрос у меня). Я же применяю БЕЗЗНАКОВЫЙ сдвиг >>>, то есть не должен знаковый бит копироваться в освобождаемые биты! Оказывается оператор >>> нифига не байт сдвигает — он не умеет байты сдвигать. Сначала байт расширяется до int, потом int сдвигается беззнаково — получаем 0x7fffffff, а потом результат впихивается в байт обрубая старшие биты. Потому что integer promotion

а вот такой код
byte b=(byte)0xff;
b>>>=25;

дает 0x7f
очень интуитивно.
Что им мешало сделать оператор >>> для short и byte тоже? Непонятно.

CRT>>Оказывается потому что сначала он приводится к знаковому int, а потом уже к этому int применяется преобразование (unsigned int).

CC>Может для начала надо бы почитать про язык и его правила?

понятно что это правила, но эта подветка пошла от вопроса "Что не так с integer promotion?".
то есть "а не лучше ли если бы были другие правила или лучше так оставить?"
Отредактировано 05.09.2023 13:20 CRT . Предыдущая версия . Еще …
Отредактировано 05.09.2023 11:40 CRT . Предыдущая версия .
Отредактировано 05.09.2023 9:17 CRT . Предыдущая версия .
Отредактировано 05.09.2023 9:03 CRT . Предыдущая версия .
Отредактировано 05.09.2023 8:59 CRT . Предыдущая версия .
Отредактировано 05.09.2023 8:57 CRT . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.