Я пытаюсь создать double
, добавив двоичные представления двух int
s. Это то, что я сейчас:Создайте double путем добавления двоичных представлений двух ints
int i = arc4random();
*(&i+1) = arc4random();
double d = *(double*)&i;
Я надеялся, что double
указатель будет также использовать значение в &i+1
адрес, и это действительно так. Когда я печатаю двоичные представления i
и *(&i+1)
и сравниваю их с двоичным представлением d
, d состоит из добавления *(&i+1)
и i
. Итак, *(&i+1)
на первом месте ?! Почему это так?
EDIT: также ознакомьтесь с ответами Хуана Каталанца и Марка Сегала, чтобы узнать, как правильно делать то, что я сделал с помощью профсоюзов.
НЕ СДЕЛАТЬ ЭТО! Вы вызываете неопределенное поведение, используя память, не выделенную для переменных. –
[Двоичные операции в парном разряде в C] (http://stackoverflow.com/q/20458125). Также имейте в виду, что с помощью этой схемы вы можете создать «NaN». –
Если вам действительно нужно создать NaN, 'strtod (« NaN »)'. 'strtod (" inf ")' тоже полезен. –