Átadás float értéket C programot assembler szintű program segítségével csak egész szám regiszterek?

szavazat
0

Az én osztály írunk egy egyszerű ASM programot (C és az AT & T x86-64), amely kiírja az összes bit integer vagy float. Van egész része jól működik. Az úszó része a professzor tanított, hogy adja át a lebegőpontos érték csak használ egész nyilvántartásokban. Nem is biztos, hogy miért is nem szabad használatát úszó nyilvántartásokban. Függetlenül attól, nem akárki volna ötleteket, hogyan szeretné ezt?

A kérdést 02/12/2019 23:50
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
1

a professzor tanított, hogy adja át a lebegőpontos érték csak használ egész nyilvántartásokban.

Egy egyszerű megközelítés, hogy másolja az floategy egész használatávalmemcpy()

float f = ...;
assert(sizeof f == sizeof(uint32_t));

uint32_t u;
memcpy(&u, &f, sizeof u);
foo(u);

A másik az, hogy egy union. Talán egy vegyületet szó .

void foo (uint32_t);

int main() {
  float f;
  assert(sizeof f == sizeof(uint32_t));

  //  v----------- compound literal -----------v
  foo((union { float f; uint32_t u; }) { .f = f}.u);
  //   ^------ union object ------- ^
}

Mindkét megkövetelik, hogy a egész típusú használni, és a floatjelentése az azonos méretű.

Foglalkozni biztosító megfelelő endian a két, még nagyon gyakran a endians a floatés egész egyezik.

Válaszolt 08/12/2019 01:37
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more