Информация об изменениях

Сообщение Re[7]: Что вы думаете о Rust? от 05.09.2023 8:56

Изменено 05.09.2023 9:03 CRT

Re[7]: Что вы думаете о Rust?
Здравствуйте, CreatorCray, Вы писали:

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

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

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

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

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


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

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

понятно что это правила, но эта подветка пошла от вопроса "Что не так с integer promotion?".
то есть "а не лучше ли если бы были другие правила или лучше так оставить?"
вот в rust решили что лучше по-другому, видимо потому что видели недостатки в правилах С++ об integer promotion
Re[7]: Что вы думаете о Rust?
Здравствуйте, 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?".
то есть "а не лучше ли если бы были другие правила или лучше так оставить?"
вот в rust решили что лучше по-другому, видимо потому что видели недостатки в правилах С++ об integer promotion