Portál AbcLinuxu, 18. dubna 2024 13:56


Dotaz: int vs unsigned int, c vs c++ -> vraci jine hodnoty

6.8.2011 02:15 sparrowhawk | skóre: 6
int vs unsigned int, c vs c++ -> vraci jine hodnoty
Přečteno: 347×
Odpovědět | Admin

dobry den,

mohl by mi nekdo vysvetlit, proc u obou techto kodu je vysledek pokazde jiny? v pripade C je v promenne "c" ulozeno take cislo 2, ktere by tam ale byt nemelo, ze?
v pripade C++ je v "c" ulozeno cislo, ktere je rovne maximalni hodnote int zkracene o prave zadane cislo vzdy o jednu mensi

 

kod C

#include <stdio.h>
int main()
{
int a;
signed int b;
unsigned int c;
printf("Enter a");
scanf("%d", &a);
printf("int=%d",a);
printf("Enter b");
scanf("%d", &b);
printf(" signed=%d",b);
printf("Enter c");
scanf("%d", &c);
printf(" unsigned=%d",c);
return 0;
}


kod C++

#include <iostream>
using namespace std;
int main(void)
int a;
signed int b;
unsigned int c;
cout << "Enter number a: ";
cin >> a;
cout << "Enter number b: ";
cin >> b;
cout << "Enter number c: ";
cin >> c;
cout << "int = "<< a << ", signed int = " << b << ", unsigned int = "<< c << endl;
}

predem dekuji za jakekoli reakce


Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.8.2011 05:14 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: int vs unsigned int, c vs c++ -> vraci jine hodnoty
Odpovědět | | Sbalit | Link | Blokovat | Admin
Přílohy:
Nějak to nechápu kde je ten rozdíl ? Mě to vypisuje stejné hodnoty ...
[petr@nt ~]$ ./pokus.bin
Enter a 2
 int=2
Enter b 2
 signed=2
Enter c 2
 unsigned=2
[petr@nt ~]$ ./pokus.bin
Enter a 1
 int=1
Enter b 1
 signed=1
Enter c 1
 unsigned=1
[petr@nt ~]$ ./pokus.bin
Enter a 100
 int=100
Enter b 100
 signed=100
Enter c 100
 unsigned=100
[petr@nt ~]$ ./pokus_cpp.bin
Enter number a: 2
Enter number b: 2
Enter number c: 2
int = 2, signed int = 2, unsigned int = 2
[petr@nt ~]$ ./pokus_cpp.bin
Enter number a: 1
Enter number b: 1
Enter number c: 1
int = 1, signed int = 1, unsigned int = 1
[petr@nt ~]$ ./pokus_cpp.bin
Enter number a: 100
Enter number b: 100
Enter number c: 100
int = 100, signed int = 100, unsigned int = 100
6.8.2011 11:56 sparrowhawk | skóre: 6
Rozbalit Rozbalit vše Re: int vs unsigned int, c vs c++ -> vraci jine hodnoty
jsem vul, v dotazu jsem spatne uvedl, ze pri zadani zaporneho cisla, napr. "-2" ....... nicmene, nize uz mi bylo vse vysvetleno. jedna se %d vs %u. toto problem vyresilo

vsem dekuji za odpovedi
6.8.2011 12:00 sparrowhawk | skóre: 6
Rozbalit Rozbalit vše Re: int vs unsigned int, c vs c++ -> vraci jine hodnoty
nicmene mam k tomuto jeste jeden dotaz. podle vseho se zda, a ted me opravte, nebo mi to potvrdte, ze v pripade C je kazdy typ by default unsigned a v pripade C++ je kazdy typ by default signed. je to tak?
6.8.2011 12:45 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: int vs unsigned int, c vs c++ -> vraci jine hodnoty
Ne. Proč si to myslíte? U int, long i long long je default signed. Jen v případě char je to složitější a závisí to na dalších okolnostech.
6.8.2011 12:50 sparrowhawk | skóre: 6
Rozbalit Rozbalit vše Re: int vs unsigned int, c vs c++ -> vraci jine hodnoty
jo, mate pravdu. moje i chyba pri oprave zdrojoveho kodu. jsem s %d nahradil za %u i u samotneho int. dekuji, uz je to jasne a uz vim
Řešení 1× (sparrowhawk (tazatel))
6.8.2011 05:31 Sten
Rozbalit Rozbalit vše Re: int vs unsigned int, c vs c++ -> vraci jine hodnoty
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tipuju problém v tom, že ve formátovacích funkcích zaměňujete signed a unsigned:
scanf("%u", &c);
printf(" unsigned=%u",c);
Řešení 1× (sparrowhawk (tazatel))
6.8.2011 10:55 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: int vs unsigned int, c vs c++ -> vraci jine hodnoty
Odpovědět | | Sbalit | Link | Blokovat | Admin

To má být nějaký kvíz "uhodněte, jak měl znít dotaz"? Za prvé: druhá ukázka nejde přeložit, protože vám tam chybí otevírací levá složená závorka funkce main(). Za druhé: neuvádíte, na jaké platformě a jakým překladačem jste to překládal. Za třetí (a nejhorší): neobtěžoval jste se ani napsat, s jakým vstupem jste to vlastně testoval. Za čtvrté: tvrdíte, že v proměnné c je u první ukázky hodnota 2; jak jste na to přišel, když vypisujete něco jiného, než její obsah?

Můj tip je, že jste zadával hodnotu -2, první program vám vypsal třikrát -2 (ne 2, jak tvrdíte) a druhý dvakrát -2 a potřetí něco jako 2^{32}-2. Vysvětlení je takové, že v prvním programu konvertujete zadanou hodnotu (při vstupu) na unsigned int a pak zase zpátky na int (při volání printf()). Ve druhém provedete konverzi jen jednou (při zpracování vstupu), u výstupu se použije správná verze operátoru << podle typu proměnné. Pokud byste v prvním programu použil u posledního printf() správný formát %u, dopadlo by to stejně.

6.8.2011 12:29 sparrowhawk | skóre: 6
Rozbalit Rozbalit vše Re: int vs unsigned int, c vs c++ -> vraci jine hodnoty
ano, omlouvam se, popsal jsem to spatne. vas tip byl ovsem spravny :) a resenim, jako u vyse uvedeneho komentare, byla chyba v pouziti %d namisto %u

dekuji

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.