Co jsou specifikátory formátu %ul a %lu?
Pro začátek je důležité poznamenat, že obojí %ul a %lu specifikátory formátu se používají při programování v C a oba představují dlouhé datové typy bez znaménka. Nicméně poloha písmen „ l ' a ' v ' se liší. Dopisy ' v ' a ' l 'znamená' nepodepsaný ' a ' dlouho “, resp. Zamýšlený typ argumentu je určen posloupností těchto písmen. ' %v ” určuje, že znak nebo řetězec, na který je aplikován, má datový typ unsigned int zatímco „ %l ” část určuje, že se jedná o dlouhý datový typ bez znaménka. Jinými slovy, %ul označuje nepodepsaný dlouhý datový typ while %lu označuje totéž, ale s dodatkem „ dlouho “ modifikátor velikosti.
V důsledku toho, pokud použijete %ul u proměnné, která není dlouhé celé číslo bez znaménka, můžete získat příponu l na konci výstupu. Při pokusu o tisk proměnné s určitým typem dat je důležité použít vhodný specifikátor formátu.
Zde je ukázkový kód ukazující jak %ul a %lu specifikátory formátu se liší:
%ul Specifikátor formátu v C
#includeint main ( ) {
unsigned long int i = 1234567890 ;
printf ( 'Pomocí specifikátoru formátu %%ul: %ul \n ' , i ) ;
vrátit se 0 ;
}
Ve výše uvedeném kódu definujeme proměnnou i jako dlouhé celé číslo bez znaménka a inicializujte jej na 1234567890 . The printf příkaz pak používá %ul specifikátor formátu pro tisk hodnoty i . Protože prostě %v je hlavní složkou specifikátoru a l je mimo formát, vytiskne číslo s příponou l na konci.
Výstup
%lu Specifikátor formátu v C
#includeint main ( ) {
unsigned long int i = 1234567890 ;
printf ( 'Pomocí specifikátoru formátu %%lu: %lu \n ' , i ) ;
vrátit se 0 ;
}
Ve výše uvedeném kódu je to proměnná dlouhé celé číslo bez znaménka i je deklarován a inicializován na 1234567890 a poté vytištěn pomocí %lu specifikátor formátu.
Výstup
Rozdíly mezi %ul a %lu specifikátorem formátu v C
1: Rozsah hodnot
Hlavní rozdíl mezi %ul a %lu má co do činění s rozsahem hodnot, které se očekává, že budou reprezentovat. Při programování v C používá datový typ unsigned long jiný formát než ostatní datové typy, včetně datového typu unsigned int. 32bitový int vyžaduje pouze 32 bitů paměti k uložení své hodnoty, zatímco unsigned long vyžaduje 64 bitů pro stejný typ dat, takže má významnější rozsah než int. Tohle znamená tamto %ul bude akceptovat hodnoty od 0 do +2^32-1, zatímco %lu specifikátor bude akceptovat hodnoty od 0 do +2^64-1.
2: Přesnost
Existuje také rozdíl v přesnosti hodnot, které se od nich očekává, že budou reprezentovat. s %ul specifikátor, programátor je schopen reprezentovat pouze hodnoty do 2^32-1, zatímco %lu specifikátor může představovat hodnoty až 2^64-1. I když se to na první pohled nemusí zdát jako velký rozdíl, může to nepřímo ovlivnit přesnost výsledků. Program určený k uložení hodnoty, která má například rozsah +2^64, narazí při použití na chyby %ul specifikátory, protože nebudou moci uložit data v požadovaném formátu, což vede ke ztrátě přesnosti.
3: Paměť
Konečně, %ul a %lu se také liší ve využití paměti. The %ul specifikátor vyžaduje 32 bitů paměti pro data, zatímco %lu vyžaduje 64 bitů pro stejný typ dat, tzn %lu zabírá asi dvakrát tolik paměti než %ul . To se nemusí zdát jako velký rozdíl v malých programech s malým rozsahem, ale to se může rychle stát neřiditelným, protože využití paměti programu se často zvyšuje se složitostí, což znamená, že %lu není ideální při řešení rozsáhlých aplikací.
4: Formát
Při používání je důležité pochopit přesný formát výstupu %ul nebo %lu . Konkrétně %ul format specifier vždy vydává celé číslo jako 8místnou hexadecimální hodnotu, zatímco %lu format specifier vypíše celé číslo jako 8místnou desítkovou hodnotu. To znamená, že pokud je celé číslo reprezentováno jako hexadecimální hodnota, mělo by být vytištěno jako a %ul zatímco pokud je celé číslo reprezentováno jako desítková hodnota, mělo by být vytištěno jako a %lu .
Závěrečné myšlenky
Je důležité pochopit přesné rozdíly mezi %ul a %lu specifikátory formátu při práci s jazykem C. I když se mohou zdát podobné, hlavní rozdíl je v tom %ul formát vyžaduje dlouhý celočíselný parametr bez znaménka, zatímco %lu format očekává vstup dlouhého celého čísla bez znaménka. The %ul format specifier vždy vydává celé číslo jako 8místnou hexadecimální hodnotu, zatímco %lu format specifier vypíše celé číslo jako 8místnou desítkovou hodnotu. Nakonec je důležité poznamenat, že %ul a %lu specifikátory formátu lze použít pouze při práci s proměnnými, které mají typ ‘ dlouho '.