Я не думаю, что C ++ отличается от способа, которым C обрабатывает преобразования со знаком / без знака:
Правила конвертации более сложные
когда задействованы unsigned
операнды.
Проблема в том, что сравнения
между знаковыми и неподписанными значениями
зависит от машины, потому что они зависят
по размерам различного целого
типы. (К & К)
Одним из важных факторов, который следует учитывать, является то, является ли один из типов целым числом long
, потому что это повлияет на целочисленные продвижения. Например, если long int
сравнивается с unsigned int
, а long int
может представлять все значения unsigned int
, то unsigned int
будет преобразовано в long int
. (В противном случае они оба просто конвертируются в unsigned long int
.)
Однако в большинстве случаев компилятор должен преобразовывать целые числа со знаком в целые числа без знака, если он обнаруживает несоответствие.