Jak napsat kód v C 64-bit pevného bodu?

B

boeysue

Guest
Jak napsat 64-bit pevný bod C kódu v Unixu? Protože v Unixu, provoz 64-bit pevný bod není v pořádku ... Takže může mi někdo říct, jak napsat 64-bit pevný bod operace v C kódu ! díky za pomoc!

 
64-bit integer syntax má tendenci být non-přenosný na 32-bitových překladačů.Které kompilátor používáte, a jaký problém jste viděl?Odeslat malý program, který demonstruje problém.

To funguje v MinGW GCC 3.4.2, ale dlouho dlouho, LL, a% I64d může lišit od vaší kompilátor:
Kód:

# Include <stdio.h>

int main (void)

(

long long = 1122334455667788LL, b = 1000;

printf ("produkt =% I64d \ n", * b);

return 0;

)produkt = 1122334455667788000
 
64-bit dlouhá dlouhá
ve spolupráci s směny a se zdá být špatně.
Protože jsem používat server pro změnu 32-bit přímo na 64-bit, zdá se být nasycen na 2 ^ 16.
Tak jsem prostě myslím, ANSI nepodporoval provoz 64-bitových operačních.
Mimochodem, jaká je odpověď, aby mi pomohl se změnou / přidat provoz na 64-bit!
Díky moc.

 
Sdělte nám své verzi kompileru, a ukázat nám svou Non-pracovní kód, takže vám můžeme pomoci.
to change 32-bit to 64-bit??

Co myslíš, použijte server
pro změnu 32-bit na 64-bit?

ANSI neurčuje počet bitů.To je kompilátor závislý.

 
Vlastně jsem jen to, CIC dělení filtr stejně jako můj dělení je 128 a moje fáze je 5. pořádku, pak vidím výstup bitstream držet až 2 ^ 16.
Mimochodem, jak používat cicdecim příkaz MATLABu? IWL / OWL nastavení se zdá divné, možná jsem si špatné myšlenky o tom.
plz pomozte mi ..

 
Nikdy jsem nebral, že filtr MATLAB.Typ tohoto příkazu vidět spoustu informací a příkladů:

doc mfilt.cicdecim
 
Vlastně jsem se použít 1 / -1 jako vstup a nastavení IWL = 1, tam je mnoho varovná zpráva.
Ale pokud mohu použít IWL = 2, výstup bitstream švy chyba ..
Tak jsem zmatená, aby zavedení MathWorks.

 
unie (
unsigned long x;
unsigned long y;
);

Jedná se o 64-bit celé číslo je to správné?

 
unie (
unsigned long x;
unsigned long y;
);

Jedná se o 64-bit celé číslo je to správné?

č. unsigned long x a y bydlí na stejném místě.Velikost struct je rovna

sizeof nejdelší datový typ.

sizeof (Unie (unsigned long x, unsigned long y;)) = sizeof (unsigned long);Můžete definovat takhle

typedef struct
(
unsigned long upperPart;
unsigned long lowerPart;
Int_64_Bits);

ale není možné použít tuto strukturu přímo v arihtmetic operací.jste stožár definovat vlastní operátory nebo funkce

 
mmm ..
Máte na mysli, že je třeba rozebrat na dva 32-bit části?
Ale jak to udělat provozu přidávat a násobit?
Speciálně násobit ....
Díky za odpověď.

 
Jak používat dvě části v Unixu bez montáže?
Vzhledem k tomu, provádějí-out bit po operaci Kromě toho je problém, který jsem nemohl pochopit.
Plz pomoci.

 
Podívejte se na: ftopic102863.html
Je zde definice <inttypes.h> hlavičkový soubor.

 
Můžete vyjádřit jasněji?
Který parametr nebo proměnné se to používat, že?
Protože jsem vytisknout __WORDSIZE je 32.I dont použít pro rozšíření pro 64-bit operation.Thanks za to.Přidáno po 7 minutách:To se jeví jako problém ...
long long x = 0x01 <<33;
printf ("% x \ n", x);

Ale já nevím, proč tato je správná:
long long x = 0x01;

printf ("% x \ n", x <<33);

Díky za pomoc lorh ..
Zdá se mi tak dlouho otravovat dlouho.

Mimochodem, překladač gcc jsem použil, je 2,96.Přidáno po 12 minutách:mmm ..
Stroj je i686. / / uname-m
Kompilátor gcc-2.96. / / man gcc
a jak získat více informací ve velení?

Díky za pomoc ...

 
Boeysue, konečně jste, že nám nějaké informace!Ale to pořád není dost.

Máte-li kompilovat, že s-Wall možnost (plná varování), gcc by vás varovat, že vaše printf je v rozporu int formátu a argument typu.Vaše% x printf říká se domnívat, int argument (zřejmě 32-bitů v kompilátoru).Zkuste% llx nebo% I64x místo.Nemohu odhadnout přesnou syntaxi, protože to závisí na použitém operačním systému a přesné kompilátor verze (typ gcc - version).

...Kromě toho ...

Ok, i686 znamená, že je box Pentium.32-bitová celá čísla, jak jste určili.Osobně jsem nepoužil, že přesné kompilátor, ale% llx je dobrý kandidát.Zkuste to!

Nechápu, "jak získat více informací ve velení?".Možná se ptáte-Wall.I spustit kompilátor, jako je tento:
gcc-Wall myprogram.c

 
To se jeví jako problém ...
long long x = 0x01 <<33;
printf ("% x \ n", x);

Ale já nevím, proč tato je správná:
long long x = 0x01;

printf ("% x \ n", x <<33);Vlastně, v dlouhých dlouhý x = 0x01 <<33 ;//<---- se to stane, aby se mýlit ...
varovná zpráva je vlevo posun je více než šířka typu.
Ale když jsem tisk sizeof dlouhá je 8.Takže já jsem zmatená z tohoto.

 
long long x = 0x01 <<33;

Ne, 0x01 je 32-bitový int na kompilátoru, tak řazení je o 33 bitů vám potíže.Budete mít lepší štěstí s tímto:

long long x = 0x01LL <<33;Co se to výstup na vašem kompilátoru?

long long x = 0x01;printf ("% x \ n", x <<33);

Očekával bych, "0" nebo snad "2", ale ne požadovaný výsledek "200000000"

Hádám, že to bude k očekávanému výsledku "200000000":

long long x = 0x01;printf ("% llx \ n", x <<33);
 
Hmm ...
To je pravda ... to mi pomáhá, aby dělá mnoho nonuseless věc pro work.Because vidím mnoho dokladů, které nejsou k Doporučuji psát více než 32 bit code.So výše uvedené diskuse mi pomáhá mnohem víc, díky.

 
Ahh!Podívejte se, jak mnohem jednodušší je to pro nás, které vám pomohou, když ukážete nám svůj zdrojový kód?

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Mrknutí" border="0" />Tyto stránky mohou být užitečné také:

GCC manuální část 4,10 (popisuje "LL" a "dlouhá"):
http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html # SEC71

GLIBC printf () přesnost specifikátory integer (popisuje "LL"):
http://www.gnu.org/software/libc/manual/html_node/Integer-Conversions.html # Celočíselné% 20Conversions

GCC je výborný překladač.Pokud to dělá něco, co jsem nečekal, je to většinou moje chyba!

 
Má tam ukončete všechny detailní dokument o gcc nářadí? Díky za pomoc: sm9:

 
GNU manuály Online, včetně gcc, glibc, atd:
http://www.gnu.org/manual/

Také pohled do gcc instalačního adresáře.

 

Welcome to EDABoard.com

Sponsor

Back
Top