реклама на сайте
подробности

 
 
> Работа с float..., ...как с обычным 32-х разрядным числом
e-moe
сообщение Mar 5 2006, 20:33
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 38
Регистрация: 25-11-05
Из: Россия, Москва
Пользователь №: 11 377



Возможно ли с float работать как с обычным 32-х разрядным числом, выполнять операции сдвига, логические операции? А то на выражение:
floal_var=float_var&~0x80000000;
Ругается: Error[Pe031]: expression must have integral type
и всё тут.. sad.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SSerge
сообщение Mar 6 2006, 09:00
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(e-moe @ Mar 6 2006, 02:33) *
Возможно ли с float работать как с обычным 32-х разрядным числом, выполнять операции сдвига, логические операции? А то на выражение:
floal_var=float_var&~0x80000000;
Ругается: Error[Pe031]: expression must have integral type
и всё тут.. sad.gif

Есть два способа:
1. "Не хочет - заставим"
через анонимный union:
union{
float float_var;
long long_var;
};

long_var = long_var & ~0x80000000;

или грязный хак с указателями:
long tmp = *(long*)&float_var & ~0x80000000;
float_var = *(float*)&tmp;

оба метода неявно завязаны на способ представления типов float и long и указателей на них в конкретном процессоре.

2. "Не умеет - научим"
перегрузкой функции operator& (...)
Но это только в C++, и хотя бы один из операндов должен быть экземпляром класса или сама функция, реализующая operator& - членом класса.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 03:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016