Побитовые операторы и знаковые типы ⇐ C++

Программы на C++. Форум разработчиков
Anonymous
Побитовые операторы и знаковые типы

Сообщение Anonymous »

Я читаю C++ Primer, и меня слегка смутили несколько комментариев, в которых говорится о том, как побитовые операторы работают со знаковыми типами. Процитирую:

Цитата №1


(Если говорить о побитовых операциях) «Если операнд подписан и
его значение отрицательно, то способ обработки «знакового бита» в
ряде побитовых операций зависит от машины Более того,
сдвиг влево, изменяющий значение знакового бита,
не определен"


Цитата №2


(Когда речь идет об операторе сдвига вправо) «Если этот операнд
без знака, затем оператор вставляет 0-значные биты слева; если это
знаковый тип, результат определяется реализацией — либо копии
знакового бита, либо 0-значные биты вставляются слева. "


Побитовые операторы преобразуют небольшие целые числа (например, char) в целые со знаком. Нет ли проблемы с этим преобразованием в подписанные целые числа, когда побитовые операторы часто дают неопределенное или определяемое реализацией поведение для типов подписанных операторов? Почему стандарт не преобразует char в unsigned int?



Изменить: Вот вопрос, который я удалил, но вернул его для контекста с некоторыми ответами ниже.

Позже в упражнении будет задан вопрос

"Каково значение ~'q'

Подробнее здесь: https://stackoverflow.com/questions/281 ... gned-types

Вернуться в «C++»