Mohu přetypovat 'float' na 'int' ? Pokud ano uveďte prosím jednoduchý příklad.
Děkuji. Jisla
Fórum › C / C++
Přetypování.
Prostě přiřadíš do proměnné typu integer float hodnotu. Desetinná část se uřízne (pozor, nezaokrouhlí, jenom uřízne => 9.999999999999999999 bude pořád jenom 9).
Zdravím, mám jednoduchý kód a není mi jasné jak a kde se provede přetypování proměnné a, která vstupuje jako jednobajtová, ale aniž by byla přetypovaná, tak se z ní po bitovém posunu stane dvoubajtová? Výsledek je 0xABCD, ale v při tom bitovém posunu bych očekával, že se registr postupně vyprázdní do nuly a výsledek bude jen 0xCD.
int main(void) {
unsigned char a = 0xAB;
unsigned char b = 0xCD;
unsigned short x = ((a << 8) | b);
printf("Answer is 0x%.4X", x);
return 0;
}
#5 Marin
Myslím, že jde o to, že bitový posun se vrací jako int, proto ty posunem o 8 pouze doplníš nuly do vyšších hodnot, takže je to pak ignoruje a tak to vypadá, že se nic nezměnilo.
Vidíš, co myslím:
/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <iostream>
int main()
{
unsigned char a = 0xAB;
unsigned char b = 0xCD;
unsigned short x = (a << 8);
printf("Answer is 0x%.4X", x);
return 0;
}
Answer is 0xAB00
...Program finished with exit code 0
Press ENTER to exit console.
#5 Marin
Jěště jedna ukázka:
#include <stdio.h>
int main()
{
unsigned char a = 0xAB;
unsigned char b = 0xCD;
unsigned int x = (a << 8);
printf("Answer is 0x%.8X", a);
printf("\nAnswer is 0x%.8X", x);
x = (x << 2);
printf("\nAnswer is 0x%.8X", x);
x = (x << 2);
printf("\nAnswer is 0x%.8X", x);
x = (x << 2);
printf("\nAnswer is 0x%.8X", x);
x = (x << 2);
printf("\nAnswer is 0x%.8X", x);
x = (x >> 2);
printf("\nAnswer is 0x%.8X", x);
x = (x >> 2);
printf("\nAnswer is 0x%.8X", x);
x = (x >> 2);
printf("\nAnswer is 0x%.8X", x);
x = (x >> 2);
printf("\nAnswer is 0x%.8X", x);
x = (x >> 8);
printf("\nAnswer is 0x%.8X", x);
return 0;
}
Answer is 0x000000AB
Answer is 0x0000AB00
Answer is 0x0002AC00
Answer is 0x000AB000
Answer is 0x002AC000
Answer is 0x00AB0000
Answer is 0x002AC000
Answer is 0x000AB000
Answer is 0x0002AC00
Answer is 0x0000AB00
Answer is 0x000000AB
...Program finished with exit code 0
Press ENTER to exit console.
#include <stdio.h>
int main()
{
unsigned char a = 0xAB;
unsigned char b = 0xCD;
unsigned short x = (a << 8);
printf("Answer is 0x%.8X", a);
printf("\nAnswer is 0x%.8X", x);
x = (x << 2);
printf("\nAnswer is 0x%.8X", x);
x = (x << 2);
printf("\nAnswer is 0x%.8X", x);
x = (x << 2);
printf("\nAnswer is 0x%.8X", x);
x = (x << 2);
printf("\nAnswer is 0x%.8X", x);
x = (x >> 2);
printf("\nAnswer is 0x%.8X", x);
x = (x >> 2);
printf("\nAnswer is 0x%.8X", x);
x = (x >> 2);
printf("\nAnswer is 0x%.8X", x);
x = (x >> 2);
printf("\nAnswer is 0x%.8X", x);
x = (x >> 8);
printf("\nAnswer is 0x%.8X", x);
return 0;
}
Answer is 0x000000AB
Answer is 0x0000AB00
Answer is 0x0000AC00
Answer is 0x0000B000
Answer is 0x0000C000
Answer is 0x00000000
Answer is 0x00000000
Answer is 0x00000000
Answer is 0x00000000
Answer is 0x00000000
Answer is 0x00000000
...Program finished with exit code 0 Press ENTER to exit console.
#1 jisla
a nezapomeň dávat před proměnou typ, na který přetypováváš jinak v tom zdrojáku bude děsnej bordel
#include <iostream>
int main() {
float desetine;
int cele;
std::cout << "Zadej desetine cislo: ";
std::cin >> desetine;
cele = (int) desetine;
std::cout << "Cele cislo je: " << cele;
return 0;
}
Přidej příspěvek
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Přetypování — založil Pavel Synek
Přetypování — založil Keyzio
C# přetypování — založil ondra
Pretypovani v C — založil TuTi_fruTi
Nefunguje přetypování (Qt) — založil ingiraxo
Moderátoři diskuze