|
Страници по тази тема: 1 | 2 | 3 | (покажи всички)
Тема
|
Битово присвояване float -> int
|
|
Автор |
Pekoнcтpykтop (дарвинист) |
Публикувано | 06.12.09 12:41 |
|
Има ли някаква общоприета конвенция, когато искаш да прехвърлиш физическата стойност на float някъде другаде, примерно в int, без да ползваш memcpy, или нещо от сорта i = *((int*)&f) (нема да мине ни едно код ревю)?
Също има ли начин за битово сравняване на две променливи с еднакъв размер?
| |
|
Бе общоприета конвенция за такива фокуси ме съмнява да има, но най-културно ми се вижда с юнион с констуктори. Ето ти цяло работещо програмче за пример как се ползва:
#include <iostream>
using namespace std;
union Mem32
{
float fVal;
int iVal;
Mem32(float f) : fVal(f) {}
Mem32(int i) : iVal(i) {}
bool operator == (const Mem32& r) const { return iVal == r.iVal; }
bool operator != (const Mem32& r) const { return iVal != r.iVal; }
};
int main(void)
{
Mem32 a(5);
Mem32 b(2.5f);
cout << (a == 5) << endl;
cout << (b == 2.5f) << endl;
cout << (a != 5) << std::endl;
cout << (b != 2.5f) << std::endl;
return 0;
}
ПП: тая идиотия слага по един празен ред в повече.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
|
ако някой ти скочи че е некултурно, можеш да му нашокаш ряпата че микрософт ползват това нещо съвсем официално, в апито на директХ. говоря за функцията SetRenderState, която приема параметър DWORD, но ако рендер стейта който се бара иска флоат стойност, се предава точно като *((int*)&f)
NE SUTOR ULTRA CREPIDAM
| |
Тема
|
Re: Битово присвояване float -> int
[re: zaphod]
|
|
Автор |
Colombino (програмист) |
Публикувано | 06.12.09 14:26 |
|
Бе тоя аргумент с Майкрософт едва ли ще мине на място, където гледат да пишат културно. Майкрософт не са известни с културата си на писане, напротив. Най-малкото нема да мине тоя каст ако го викаш от C++ (требва reinterpret_cast). Тук между другото си направил const_cast без да искаш.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
Тема
|
Re: Битово присвояване float -> int
[re: Colombino]
|
|
Автор |
zaphod (мракобес) |
Публикувано | 06.12.09 14:37 |
|
Най-малкото нема да мине тоя каст ако го викаш от C++
ти ли го каза това?!?
NE SUTOR ULTRA CREPIDAM
| |
Тема
|
Re: Битово присвояване float -> int
[re: zaphod]
|
|
Автор |
Colombino (програмист) |
Публикувано | 06.12.09 14:59 |
|
Не ме разбра. Ревю нема да мине.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
Тема
|
Re: Битово присвояване float -> int
[re: Colombino]
|
|
Автор |
BlGBUGEX (нерегистриран) |
Публикувано | 06.12.09 15:34 |
|
Що? Де го това ревю?
Ако ме пита някой - въздухарски работи. С++-систите сте били много набожни бре.
| |
Тема
|
Re: Битово присвояване float -> int
[re: BlGBUGEX]
|
|
Автор |
Colombino (програмист) |
Публикувано | 06.12.09 15:43 |
|
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
|
| |
|
Не съм гo пробвал но евентуално би трябвало да проработи:
template< typename TIn, typename TOut >
union TypeConverter
{
TIn inValue;
TOut outValue;
};
void Foo()
{
TypeConverter<int,float> test;
test.inVal = 5;
float result = test.outVal;
}
may the source be with you... Редактирано от ak_47 на 06.12.09 21:25.
| |
|
Страници по тази тема: 1 | 2 | 3 | (покажи всички)
|
|
|