21. november 2003 - 15:56Der er
11 kommentarer og 3 løsninger
Excplicit typecast?
Hello!
I was so sure that I would get a RuntimeException for the code below since the short value is to big to be represented by a byte. But I got "16" in the output if the short value was 10000 and "48" if the short value was 30000.
Can any one explain what the rule is for Java to decide what the value after the typecast in the byte will be?
Best Regards Fredrik
public class Test { public static void main(String[] args) { short myShort = 30000; byte myByte = (byte)myShort; System.out.println(myByte); } }
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Den generelle regel er at når du udtrykkeligt fortæller java at den skal caste fx en int til en byte, så er det på dit eget ansvar hvis der går noget tilspilde.
det er kun hvis du fx siger byte b = 127; b += b; at du kan forvente en exception.
en byte er 8 bit. en shoret er 16 bit en int er 32 bit en long er 64 bit og de er alle 'signed', dvs at den 'øverste' bit er fortegn
00000000 10000000 s fortegnsbit er 0 så dette tal (short) er positivt 1 2^7 bit er 1 så 128
10000000 s fortegnsbit er 1 så dette tal (byte) er negativt og så skal vi snakke om 1-complement representation for at forstå at talværdien er 128. den er lidt komplex, men prøv selv hvor mange gange du kan lægge 00000001 til før du får et 00000000
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.