Reprezentace celých čísel v jazyce C
Osnova cvičení
- poziční číselné soustavy a převod mezi nimi
- aritmetické operace v binární soustavě
- čísla v paměti a endianita
- bitové operace
Úkoly
-
Převeďte čísla 42 a -57
- do dvojkové soustavy jako typ
uint8_taint8_t - do šestnáctkové soustavy jako typ
uint32_taint32_t.
- do dvojkové soustavy jako typ
-
Převeďte číslo
0b10101010- do desítkové soustavy jako typ
uint16_taint16_t. - do šestnáctkové soustavy jako typ
uint8_taint8_t.
- do desítkové soustavy jako typ
-
Převeďte číslo
0xAFdo binární soustavy jako typuint8_taint8_t. -
Vyzkoušejte si ručně sčítání a odčítání celých čísel v doplňkovém kódu
- demonstrujte výpočet např. 7+6, 7-6
- procvičte výpočet na dalších číslech a s pomocí programu výsledky ověřte
- Kdy může dojít k přetečení a jak poznáte, že k němu došlo?
-
Násobení celých čísel
- demonstrujte výpočet např. 7*6
- jak se výpočet změní v případě záporných čísel? např.
-7*6,-7*(-6),7*(-6)
-
Dělení celých čísel
- demonstrujte výpočet např. 42/7, 43/7
- jak se výpočet změní v případě záporných čísel?
- jak získáte zbytek po dělení?
- Dokážete v některých případech provést dělení rychleji?
-
Napište program v jazyce C, který pomocí bitových operací vypíše
- jednotlivé bity čísla od nejnižšího po nejvyšší.
- jednotlivé bity čísla od nejvyššího po nejnižší.
- (bonus) číslo v šestnáctkové soustavě.
Procvičení na doma
Navrhněte program (knihovnu), který bude implementovat základní aritmetické operace (negace,sčítání, odčítání, násobení, dělení, modulo, a základní bitové operace) pro fiktivní typ uint256_t a int256_t
Program pro zkoumání paměti v C
Přebráno z tohoto zdroje.
/*
* Wrapper pro funkci print_mem. Zjisti adresu predavaneho datoveho typu
* a jeho velikost, kterou je potreba zkoumat.
*/
void
int