Двойное дополнение к двойному - PullRequest
0 голосов
/ 21 марта 2011

Как выполнить двойное дополнение на двойном и вернуть двойное?

Ответы [ 2 ]

2 голосов
/ 21 марта 2011

Если вы пытаетесь сделать дополнение двух к внутреннему битовому представлению двойника, вы можете использовать BitConverter class .

Что-то вроде:

double x = 12345.6;
Int64 bits = BitConverter.DoubleToInt64Bits(x);
bits = ~bits + 1;
x = BitConverter.Int64BitsToDouble(bits);

Я не уверен, почему вы хотели бы сделать это, хотя ...

0 голосов
/ 21 марта 2011

Возможно, вам понадобится привести в длинное русло, а затем выполнить двойное дополнение и отыграть обратно:

double x = 1245.1;
long l = (long)x;
l=~l; l++; /* complement followed by + 1 */
x = (double)l;

Я не проверял это, но, надеюсь, он выведет вас на правильный путь.

Редактировать: Поскольку вы не можете приводить от двойного к длинному с битовым представлением, вам может потребоваться сделать что-то вроде:

double x = 1234.5;
ulong l;
unsigned char * d = (unsigned char *) &x;
l = (ulong)(*d);
l=~l; l++;
d = (unsigned char *) &l;
x = (double)(*d);

Снова непроверенный ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...