[ 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 | 52
Bydlisko: Dubovce
NapísalOffline : 22.02.2017 23:18 | Dátové typy

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 (v < 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 | 3
NapísalOffline : 23.02.2017 10:50 | Dátové typy

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 | 52
Bydlisko: Dubovce
Napísal autor témyOffline : 23.02.2017 14:33 | Dátové typy

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: 14571
Témy: 66 | 66
Bydlisko: Žilina
NapísalOffline : 23.02.2017 14:49 | Dátové typy

Č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 | 3
NapísalOffline : 23.02.2017 14:58 | Dátové typy

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 | 52
Bydlisko: Dubovce
Napísal autor témyOffline : 23.02.2017 15:30 | Dátové typy

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: 14571
Témy: 66 | 66
Bydlisko: Žilina
NapísalOffline : 23.02.2017 17:17 | Dátové typy

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 | 52
Bydlisko: Dubovce
Napísal autor témyOffline : 23.02.2017 17:19 | Dátové typy

walther ďakujem.


 [ Príspevkov: 8 ] 


Dátové typy



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

1385

15.05.2007 14:14

Lub0$

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

Typy procesorov

v Intel

2

560

01.07.2013 19:03

liqua1

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

Typy pripojenia

v Siete

9

1077

13.12.2005 17:08

Pufo Callo

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

Tichá klávesnica - typy

v Externé zariadenia

0

451

09.10.2014 23:43

vlado_PLUS

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

2 typy ramiek

v Pamäte

4

845

10.10.2009 14:56

Warrick

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

Typy pre samsung tablet

v Notebooky a netbooky

13

948

18.09.2012 10:33

Martinicoss

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

Základní typy digitálních fotoaparátů

v Prenosné zariadenia

0

3798

11.05.2005 15:35

Lukas[CZE]

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

Značky notebookov, typy procesorov atď.

v Notebooky a netbooky

11

614

05.01.2017 23:28

trionq

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

Ako zalohovat len urcite typy suborov?

v Ostatné programy

7

778

20.12.2008 16:36

som3body

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

DVD Video a iné typy súborov

v Video programy

5

460

22.10.2014 15:20

shiro

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

Nove ceny aj typy C2D a ine

v Intel

0

776

21.06.2007 19:14

cicolably

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

Datové úložisko

v Úložné zariadenia

0

550

04.12.2011 16:02

Niktoskoo

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

Datove ulozisko

v Úložné zariadenia

0

622

14.07.2011 11:28

jepeto

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

Datové kabely

v Pevné disky a radiče

17

2046

01.11.2005 13:57

Spirit

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

Datove centrum

v Hosting, servery a domény

0

762

15.01.2009 13:56

Blackshadow

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

Datove uložisko

v Siete

6

1312

24.05.2011 10:24

johny3212



© 2005 - 2026 PCforum, edited by JanoF