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?
"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.
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?
"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.
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.
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.
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.
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.
Synes godt om
Ny brugerNybegynder
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.