Win a copy of Functional Reactive Programming this week in the Other Languages forum!

# Casting Integer to byte

ragi singh
Ranch Hand
Posts: 198
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
Posts: 15486
43
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.

Sheriff
Posts: 14691
16
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
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
Posts: 50241
79
Too difficult to be a "beginning" topic. Moving thread.