Приведение к неподписанному int, затем приведение назад, C - PullRequest
1 голос
/ 02 декабря 2011

Если у меня есть стек S, заполненный знаковыми числами, я хочу сделать следующее: POP два значения и привести его к беззнаковому целому, затем сложить их вместе, а затем вернуть сумму SIGNED.Я сделал следующее, но я не знаю, правильно ли это:

unsigned int x = (unsigned int)pop(S)
unsigned int y = (unsigned int)pop(S)
int sum = x+y
push(S, sum);
pc++

Я на правильном пути?Кроме того, кто-то может объяснить мне немного о явном приведении?Спасибо.

1 Ответ

2 голосов
/ 02 декабря 2011

Вы правы в том смысле, что ваш код делает именно то, что вы говорите, он должен делать. Реальный вопрос в том, хотите ли вы этого или нет.

Отрицательное число, приведенное к unsigned int, становится очень большим положительным числом. Например, отрицательное становится наибольшим положительным целым числом, которое может быть выражено в беззнаковом int после преобразования в unsigned (попробуйте!) Когда вы добавляете два отрицательных числа, которые были приведены к unsigned, вы гарантированно получите переполнение. Если это действительно то, что вы пытаетесь сделать, то ваш код определенно делает это.

...