Avatar billede data2k.dk Nybegynder
10. december 2004 - 20:56 Der er 20 kommentarer

om variablen byte

hvad er det for en sag? hvordan kan den anvendes? eller til hvad.. gerne eksempler.. og den grænser...
Avatar billede soreno Praktikant
10. december 2004 - 21:40 #1
En byte er 8 bit.
En byte i Java er signed, dvs. at den kan repræsentere værdier i intervallet: [-128;127]

Den kan være anvendelig når man arbejder med binærefiler, sockets eller andet som er repræsenteret ved bytes.
Avatar billede jakoba Nybegynder
10. december 2004 - 21:43 #2
byte er en datatype.  hvis du laver en variabel af typen byte vil den variabel kunne indeholde tal værdier imellem -128 og 127.

byte testVariabel;

testvariabel = 127;  // helt ok

testVariabel = 200;  // det går galt, tallet 200 er for stort.

mvh JakobA
Avatar billede data2k.dk Nybegynder
10. december 2004 - 21:49 #3
hmm... hvorfor kan man så skrive

byte test = 00000100;
  System.out.println(test);

og så får man tallet 64 ? har det noget med binary tal at gøre?
Avatar billede soreno Praktikant
10. december 2004 - 21:51 #4
0100 er oktal tal (dvs. tal med radix 8).
Konverteret til decimal er det 64.
Avatar billede data2k.dk Nybegynder
10. december 2004 - 21:55 #5
sådan for sjov.. hvordan vil -128 så se ud i oktal tal? hvis vi lige leger det er et negativt tal altså

01000010
?
Avatar billede data2k.dk Nybegynder
10. december 2004 - 21:59 #6
så hvis man i sin byte har en værdi af 127 og vil ligge 1 til så vil der ikke står 128 men -128 ? korrekt? ligger man 129 til 127 vil det give 0... 130 til 127 så bliver det til 1?

er det også sådan med Int, double osv?
Avatar billede soreno Praktikant
10. december 2004 - 22:05 #7
Prøv selv:

    byte b = 0;
    while(true)
        {
        System.out.print(b++ +"  ");
        if(b % 10 == 0)
            System.out.println();
        if(b == 0)
            System.out.println();
        }
Avatar billede jakoba Nybegynder
10. december 2004 - 22:27 #8
"så hvis man i sin byte har en værdi af 127 og vil ligge 1 til så vil der ikke står 128 men -128 ? korrekt?"

Ja og nej. Java har fejlhåndtering der gåt igang når man prøver at 'misbruge' en variabel på den måde. der bliver kastet en Exception. Prøv selv i et lille testprogram.

Men hvis Java lod dig gøre det ville resultatet blive -128.
Avatar billede data2k.dk Nybegynder
10. december 2004 - 22:44 #9
jakoba det gav Java mig lov til hehe og det også -128. men fungere det også sådan med de andre variabler? når man overskrider deres grænser? fx en int eller double? går den så også fra pluds til minus?
Avatar billede jakoba Nybegynder
10. december 2004 - 22:48 #10
du burde pokkerme få en exception.

Bår du ikke får en er det arne-v eller en anden *rigtig* javaexpert vi skal have fat i for at få forklaret hvorfor.
Avatar billede jakoba Nybegynder
10. december 2004 - 22:50 #11
ups, sorry.
eller soreno.
Avatar billede data2k.dk Nybegynder
10. december 2004 - 22:51 #12
Men jeg kunne heller ikke se hvorfor den skulle give en exception.. den overskrider jo ikke sin grænser... den går fra pluds til minus.

hvis den skrev 129 ville den give en exception.. eller tror faktisk java ville lave en compliller fejl
Avatar billede data2k.dk Nybegynder
10. december 2004 - 22:52 #13
ja den skriver Error(9,10): possible loss of precision: int, required: byte
hvis man prøver det.
Avatar billede arne_v Ekspert
11. december 2004 - 00:15 #14
"possible loss of precision" har intet med overflow at gøre.

byte b1 = 1;
byte b2 = b1 + 1;

giver samme fejl som:

byte b1 = 127;
byte b2 = b1 + 1;

Den fejl skyldes at jave konverterer b1 til en integer, ligger 1 til og så
protesterer den over at du forsøge at assigne en int til en byte uden explicit cast.
Avatar billede arne_v Ekspert
11. december 2004 - 00:23 #15
Det er for dyrt at detecte overflow software mæssigt. Hvis det ikke skal
degradere performance voldsomt, så skal det ske hardware mæssigt.

Så overflow detection kræver 2 ting:
  - hardware support for det
  - compiler support for at enable overflow detection i hardware

Så vidt jeg ved (jeg er ikke hardware ekspert), så har x86 CPU arkitekturen
support for floating point overflow detection men ikke for integer overflow
detection.

Java har så vidt jeg ved ikke support for at enable nogen af dem.
Avatar billede arne_v Ekspert
11. december 2004 - 00:24 #16
byte/short/int/long overflower til negative tal

float/double overflower til infinite
Avatar billede data2k.dk Nybegynder
11. december 2004 - 09:15 #17
så er mit spørgsmål om det er meget vigtigt eller bare godt at kunne følgende

kunne
oversætte fra binary til decimaltal eller hex
oversætte fra decimalttal til binary eller hex
oversætte fra hex til binary eller decimaltal

ved oversætte kunne regne med binarytal og ellers forstå hex(som skulle være en hjælp)

jeg kan på nuværende tidspunkt nemlig ikke se hvor jeg lige får brug for dette.. har fået af vide det så vi bare kan se at en computer har nogen begrænsninger eller at det kan være svar på hvorfor vores programmer nogen gange ikke handler som de skal.
Avatar billede arne_v Ekspert
11. december 2004 - 09:41 #18
Jeg vil kalde det en del af almindelig IT dannelse at kende lidt til hex og binært.

Hvis du arbejder med programmering vil du relativt tit støde på hex konstanter,
hex dumps, henvisninger til at bit n er sat etc..

Det vil man formode siger dig noget.
Avatar billede jakoba Nybegynder
11. december 2004 - 11:05 #19
med '+' og '-' er overflowdetect så nemt som at klø sig i nakken  (MSB xor 'carry out') den er hardwired i enhver CPU, alt der skal tilføjes er et betinget hop.

med '*' er det mere kompliceret, men i en CPU med multiplier skulle '*'-overflow stadig være lige nemt, og soft multiply er alligevel så langsomt at et par instruktioner extra ikke spiller nogen trille.

Endelig kan '/' i heltalsdomænet kun give overflow i situationen (MIN_VALUE / -1) den kan fanges med samme betingelse som '+' og '-'.

Men der vil da nok stadig være andre fejlsituationer der burde fanges, men ikke bliver det.
Avatar billede arne_v Ekspert
11. december 2004 - 11:40 #20
Et betinget hop koster også en del, når vi er nede på det niveau. Jeg kan heller
ikke lige umiddelbart komme i tanke om en compiler der kan gøre det.

Jeg formoder at en Ada compiler kan.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester