Практически да .Все обычные архитектуры должны дополнять два и обрабатывать преобразования без знака в подпись одинаковой ширины как в основном запретные операции.
Теоретически не всегда .Стандарт C говорит, что преобразования в не _Bool
типы не изменяют значения, если значения соответствуют ( 6.3.1.3p1 ), в противном случае для преобразования без знака в подпись вы либо получаете преобразование, определенное реализациейили сигнал повышается ( 6.3.1.3p3 ).
6.3.1.3 Целые числа со знаком и без знака
1 Когда значениес целочисленным типом преобразуется в другой целочисленный тип, отличный от _Bool, если значение может быть представлено новым типом, оно не изменяется.
2 В противном случае, если новый тип является беззнаковым, значение преобразуется повторнодобавление или вычитание более одного максимального значения, которое может быть представлено в новом типе, до тех пор, пока значение не окажется в диапазоне нового типа. 60)
3 В противном случае новый тип подписывается и значение не может бытьпредставлены в нем;либо результат определяется реализацией, либо генерируется определяемый реализацией сигнал.
(преобразования в _Bool выполняются путем сравнения с 0 ( 6.3.1.2p1 ). Есть такжебез изменений, если источник соответствует (0 или 1), но все ненулевые числа преобразуются в (_Bool)1
, тогда как если применить правило циклического изменения ( 6.3.1.3p2 ), то четные числа преобразуются в (_Bool)0
, но они этого не делают.)
Как отметил * * * * * * * * * * * * * * * * * * * * * * * * * - замечает C2x, исключая специальный случай, C2x должен исключить особый случай. всегда да .