Win a copy of Clojure in Action this week in the Clojure forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Casting Integer to byte

 
ragi singh
Ranch Hand
Posts: 198
Oracle Suse
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi all,


I am studying casting of Primitive types , but i cannot understand how can we cast an integer whose range is from 0-65535 into a byte whose rannge is 0-256 . We will never be able to cast integer values greater than 256 into bytes . However the book says we will only get a loss of precision . Can any one explain .
Ill elaborate my doubt.

example:-
int a=10;
int b=65534
byte c=(byte)(a+b);

Even when we apply an external cast we will not be able to cast it into byte the value of integer sum is greater than the byte range . how can we ever get the result ?
 
Jesper de Jong
Java Cowboy
Saloon Keeper
Pie
Posts: 15150
31
Android IntelliJ IDE Java Scala Spring
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The type int is a 32-bit signed integer, so the range is from -2^31 to 2^31 - 1 = -2147483648 to 2147483647. Not from 0 to 65535 as you said.

And the type byte is an 8-bit signed integer, which has a range from -2^7 to 2^7 - 1 = -128 to 127. Not from 0 to 256 as you said.

When you cast an int to a byte, only the lower 8 bits of the int are taken. The higher 24 bits are thrown away. So you lose information when you cast an int to a byte.
 
Christophe Verré
Sheriff
Pie
Posts: 14691
16
Eclipse IDE Ubuntu VI Editor
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
integer whose range is from 0-65535

No, integers are signed four-byte values. The maximum value is 0x7fffffff (2147483647).

Even when we apply an external cast we will not be able to cast it into byte the value of integer sum is greater than the byte range . how can we ever get the result ?

This is called a narrowing primitive conversion, and is explained in details here.

A narrowing conversion of a signed integer to an integral type T simply discards all but the n lowest order bits, where n is the number of bits used to represent type T. In addition to a possible loss of information about the magnitude of the numeric value, this may cause the sign of the resulting value to differ from the sign of the input value.
 
Yogesh Gnanapraksam
Ranch Hand
Posts: 133
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Have a look at this thread
http://www.coderanch.com/t/384557/java/java/Casting-int-value-Byte

It would be nice if you can tell how it prints 8 based on your understanding.
 
Campbell Ritchie
Sheriff
Pie
Posts: 47232
52
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Too difficult to be a "beginning" topic. Moving thread.
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic