я следующий код:Где происходит преобразование знака?
unsigned int x, last_x;
int dx;
[...]
dx = x - last_x;
Компиляция это с г ++ (4.7.2) и -Wsign-преобразования производит следующее: warning: conversion to ‘int’ from ‘unsigned int’ may change the sign of the result [-Wsign-conversion]
Единственный способ сделать предупреждение исчезает, изменив чтобы:
dx = static_cast<int>(x) - static_cast<int>(last_x);
или
dx = static_cast<int>(x - last_x);
Какое объяснение этого поведения? Является ли оператор -
определенным для подписанных ints? Я ожидаю, что будет иметь оператор -
, который принимает значения без знака и возвращает значение со знаком.
Я не могу воспроизвести это с GCC 4.8.2, который GCC версии сделал у ou использовать? – nos
Я использую 4.7.2 –
Первый литой (static_cast (x - last_x)) не дает предупреждения (g ++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2) –