2017-02-10 21 views
-2

Предположим, я хочу обменять переменные a и b с помощью XOR-swap.Может ли XOR-swap вызвать переполнение и работает ли он с поплавками?

a = a^b; 
b = a^b; 
a = a^b; 

Может ли это вызвать переполнение, и могу ли я поменять эти числа, когда они имеют тип float или double?

+4

Это может привести к переполнению 'int' и не работает с типами FP. – chux

+3

Неужели это действительно должен быть вопросом? Если вы не уверены, вы можете просто [проверить] (https://ideone.com/6vZN4z) – Geoff

+0

Вы можете XOR и вводить в виде кучки битов, если вы отбрасываете его на целое число той же ширины, а затем отбрасываете обратно , –

ответ

1

Это будет иметь неопределенное поведение; это может вызвать любое количество проблем.

Даже если вы нашли надежный способ получить представление битов числа с плавающей запятой в виде целого числа того же размера, вам все равно удастся создать представление ловушки с плавающей запятой при промежуточном XOR, поэтому сохранение этого в значение с плавающей запятой может быть проблематичным.

XOR hack is passé. Используйте временный. На вашем компьютере, вероятно, есть лот регистров с плавающей запятой, и их использование происходит очень быстро.

Смежные вопросы