Сообщение Re[7]: Что вы думаете о Rust? от 05.09.2023 8:56
Изменено 05.09.2023 9:03 CRT
Re[7]: Что вы думаете о Rust?
Здравствуйте, CreatorCray, Вы писали:
CRT>>Он не понимает почему байт, даже знаковый, беззнаково расширенный до unsigned int
CC>Ещё раз: ЗНАКОВОЕ, расширенное до бОльшего колва бит.
а мы говорим об интуитивности. А так-то понятно что всё описано в 1000+ страниц спецификации С++.
Вот ты так понимаешь: "ЗНАКОВОЕ, расширенное до бОльшего колва бит."
а кто-то понимает так "если я преобразую в беззнаковый тип, какого хрена он знаковый бит размножает??"
в java похожие приколы
получаем тот же 0xff в b
Что за хрень? (был когда-то вопрос у меня). Я же применяю БЕЗЗНАКОВЫЙ сдвиг >>>, то есть не должен знаковый бит копироваться в освобождаемые биты! Оказывается оператор >>> нифига не байт двигает — он не умеет байты двигать. Сначала байт расширяется до int, потом int двигается беззнаково — получаем 0x7fffffff, а потом результат впихивается в байт обрубая старшие биты. Потому что integer promotion
CRT>>Оказывается потому что сначала он приводится к знаковому int, а потом уже к этому int применяется преобразование (unsigned int).
CC>Может для начала надо бы почитать про язык и его правила?
понятно что это правила, но эта подветка пошла от вопроса "Что не так с integer promotion?".
то есть "а не лучше ли если бы были другие правила или лучше так оставить?"
вот в rust решили что лучше по-другому, видимо потому что видели недостатки в правилах С++ об integer promotion
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 похожие приколы
получаем тот же 0xff в b
Что за хрень? (был когда-то вопрос у меня). Я же применяю БЕЗЗНАКОВЫЙ сдвиг >>>, то есть не должен знаковый бит копироваться в освобождаемые биты! Оказывается оператор >>> нифига не байт двигает — он не умеет байты двигать. Сначала байт расширяется до int, потом int двигается беззнаково — получаем 0x7fffffff, а потом результат впихивается в байт обрубая старшие биты. Потому что integer promotion
а вот такой код
дает 0x7f
очень интуитивно.
Что им мешало сделать оператор >>> для short и byte тоже? Непонятно.
CRT>>Оказывается потому что сначала он приводится к знаковому int, а потом уже к этому int применяется преобразование (unsigned int).
CC>Может для начала надо бы почитать про язык и его правила?
понятно что это правила, но эта подветка пошла от вопроса "Что не так с integer promotion?".
то есть "а не лучше ли если бы были другие правила или лучше так оставить?"
вот в rust решили что лучше по-другому, видимо потому что видели недостатки в правилах С++ об integer promotion
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