Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 8 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Dátové typy

Registrovaný: 01.05.14
Prihlásený: 07.11.19
Príspevky: 152
Témy: 52
Bydlisko: Dubovce
Príspevok NapísalOffline : 22.02.2017 23:18

Zdravím, Mám problém s Dátovými typmi. Rozhodol som sa že trosku "optimalizujem" svoj program ale po zmene int na iný typ napr. byte mi to hádže chyby.
Zdroják:
Kód:
namespace pocitadlo
{
    public partial class Form1 : Form
    
{
        byte day;
        byte month;
        ushort year;
        byte aday;
        byte amonth;
        ushort ayear;
        ushort v;
        byte age;
        byte[] months = new byte[13] { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        public Form1()
        {
            InitializeComponent();
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            ushort s1 = 0;
            ushort s2 = 0;
            day = byte.Parse(txtDay.Text);
            month = byte.Parse(txtMonth.Text);
            year = ushort.Parse(txtYear.Text);
            aday = byte.Parse(txtADay.Text);
            amonth = byte.Parse(txtAMonth.Text);
            ayear = ushort.Parse(txtAYear.Text);
            if (year % 4 == 0 && ayear % 4 == 0)
                months[2] = 29;
            else months[2] = 28;
            for (int i = 1; i <= month; i++)
                s1 += months[i];
            for (int i = 1; i <= amonth; i++)
                s2 += months[i];
            v = (s1 + day) - (s2 + aday);
            if (day == aday && month == amonth)
            {
                age = ayear - year;
                if (year % 4 == 0 && ayear % 4 == 0)
                    v = v + 366;
                else v = v + 365;
            }
            else age = (ayear - year) - 1;
            if (< 0)
            {
                age++;
                if (year % 4 == 0 && ayear % 4 == 0)
                    v = v + 366;
                else v = v + 365;
                
            
}
            Output1.Text = "Máš "+ age +" rokov";
            Output2.Text = "Za "+ v.ToString() + " dní budeš mať narodeniny";
        }
    }

Chyby:
Kód:
Severity    Code    Description    Project    File    Line    Suppression State
Error    CS0266    Cannot implicitly convert type 
'int' to 'ushort'. An explicit conversion exists (are you missing a cast?)    pocitadlo    C:\Users\GamerSK\Documents\C#\pocitadlo\pocitadlo\Form1.cs    46    Active
Error    CS0266    Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?)    pocitadlo    C:\Users\GamerSK\Documents\C#\pocitadlo\pocitadlo\Form1.cs    49    Active
Error    CS0266    Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?)    pocitadlo    C:\Users\GamerSK\Documents\C#\pocitadlo\pocitadlo\Form1.cs    51    Active
Error    CS0266    Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?)    pocitadlo    C:\Users\GamerSK\Documents\C#\pocitadlo\pocitadlo\Form1.cs    52    Active
Error    CS0266    Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?)    pocitadlo    C:\Users\GamerSK\Documents\C#\pocitadlo\pocitadlo\Form1.cs    54    Active
Error    CS0266    Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?)    pocitadlo    C:\Users\GamerSK\Documents\C#\pocitadlo\pocitadlo\Form1.cs    59    Active
Error    CS0266    Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?)    pocitadlo    C:\Users\GamerSK\Documents\C#\pocitadlo\pocitadlo\Form1.cs    60    Active


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 23.02.2017 10:50

Chyba je veľavravná - neexistuje implicitné pretypovanie z int na typy byte a ushort. Artitmetické operácie s týmito typmi pracujú ako s intom - resp. výsledok je int, ale ukladáš ho do byte.
Takže to musíš vždy pretypovať explicitne
https://msdn.microsoft.com/en-us/library/85w54y0a.aspx
https://msdn.microsoft.com/en-us/library/5bdb6693.aspx







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Dátové typy

Registrovaný: 01.05.14
Prihlásený: 07.11.19
Príspevky: 152
Témy: 52
Bydlisko: Dubovce
Príspevok Napísal autor témyOffline : 23.02.2017 14:33

Akosi som to nepochopil ...


Offline

Skúsený užívateľ
Skúsený užívateľ
Dátové typy

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 23.02.2017 14:49

Čo konkrétne si nepochopil? Pokiaľ sčítavaš dva byty v C#, výsledok je vždy int a keďže int je väčší ako byte, musíš urobiť konverziu. PREČO to tak je sa vieš dočítať už na nete, napríklad aj v tých linkoch, ktoré sem postol BX.







_________________
C#, PHP, ...
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 23.02.2017 14:58

Pozri sem https://msdn.microsoft.com/en-us/library/5bdb6693.aspx do sekcie Conversions

A ešte sa pre zaujímavosť chytím tej optimalizácie - čo vlastne optimalizuješ takýmto postupom? A aký bude výsledok takejto optimalizácie? Čo ňou získaš?
(odpovedz ako v škole, len ma zaujíma, či naozaj vieš, prečo to robíš)







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Dátové typy

Registrovaný: 01.05.14
Prihlásený: 07.11.19
Príspevky: 152
Témy: 52
Bydlisko: Dubovce
Príspevok Napísal autor témyOffline : 23.02.2017 15:30

BX: Túto "optimalizáciu" robím hlavne kvôli menšiemu využitiu RAM.
walther: Nepochopil som ako urobím konverziu.


Offline

Skúsený užívateľ
Skúsený užívateľ
Dátové typy

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 23.02.2017 17:17

Pretypovanie je dôležitá časť pri jazykoch ako C#, treba si to doštudovať. Explicitné pretypovanie vyzerá napríklad takto:
Kód:
byte v1 = 10;
int v2 = (int)v1;


Inak rada do budúcnosti, takýmto "optimalizáciám" sa snaž vyhnúť. Množstvo RAM, ktoré by si ušetril, nestojí za reč. Malo by zmysel o takýchto veciach uvažovať napríklad keby si programoval pre netduino, ktoré má veľmi obmedzenú pamäť, ale pre desktop/notebook s windowsom, pri takomto programe je to úplne nezmysel a strata času. Samotná NET platforma zožerie niekoľkonásobne viac. Taktiež si treba uvedomiť, že akonáhle potrebuješ robiť s takýmito premennými ďalšie operácie, napr +-, tak výhoda už mizne, lebo c# ti to pretypuje na int aj tak...







_________________
C#, PHP, ...
Offline

Užívateľ
Užívateľ
Dátové typy

Registrovaný: 01.05.14
Prihlásený: 07.11.19
Príspevky: 152
Témy: 52
Bydlisko: Dubovce
Príspevok Napísal autor témyOffline : 23.02.2017 17:19

walther ďakujem.


Odpovedať na tému [ Príspevkov: 8 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Typy skiel

v Modifikácie, návody a projekty

4

1278

15.05.2007 14:14

Lub0$ Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Typy procesorov

v Intel - Integrated Electronics

2

452

01.07.2013 19:03

liqua1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Typy pripojenia

v Siete

9

972

13.12.2005 17:08

Pufo Callo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Tichá klávesnica - typy

v Externé zariadenia

0

370

09.10.2014 23:43

vlado_PLUS Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. 2 typy ramiek

v Pamäte

4

711

10.10.2009 14:56

Warrick Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Typy pre samsung tablet

v Notebooky a netbooky

13

820

18.09.2012 10:33

Martinicoss Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Základní typy digitálních fotoaparátů

v Mobilné zariadenia

0

3635

11.05.2005 15:35

Lukas[CZE] Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Značky notebookov, typy procesorov atď.

v Notebooky a netbooky

11

502

05.01.2017 23:28

trionq Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. DVD Video a iné typy súborov

v Video programy

5

344

22.10.2014 15:20

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako zalohovat len urcite typy suborov?

v Ostatné programy

7

633

20.12.2008 16:36

som3body Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nove ceny aj typy C2D a ine

v Intel - Integrated Electronics

0

695

21.06.2007 19:14

cicolably Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Datové úložisko

v Úložné zariadenia

0

449

04.12.2011 16:02

Niktoskoo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Datove ulozisko

v Úložné zariadenia

0

507

14.07.2011 11:28

jepeto Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Datové kabely

v Pevné disky a radiče

17

1941

01.11.2005 13:57

Spirit Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Datove centrum

v Webhosting a servery

0

655

15.01.2009 13:56

Blackshadow Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Datove uložisko

v Siete

6

1185

24.05.2011 10:24

johny3212 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra