aspose file tools*
The moose likes Beginning Java and the fly likes Byte Primitive type Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Byte Primitive type" Watch "Byte Primitive type" New topic
Author

Byte Primitive type

O. Ziggy
Ranch Hand

Joined: Oct 02, 2005
Posts: 430

Hi all,

I am trying to understand how the primitive byte works.

Can someone explain to me why this code is not working.



I have a feeling that it has something to do with the statement aWindow.setSize(3);
Here is the error i get.


init:
deps-jar:
Compiling 1 source file to C:\documents and settings\702723344\My Documents\projects.workspace\Netbeans\Tutorials\Interfaces\JavaApplication2\build\classes
C:\documents and settings\702723344\My Documents\projects.workspace\Netbeans\Tutorials\Interfaces\JavaApplication2\src\tut\intf\Window.java:26: setSize(byte) in tut.intf.Window cannot be applied to (int)
aWindow.setSize(3);
1 error
BUILD FAILED (total time: 0 seconds)


[ September 28, 2007: Message edited by: Fred Rosenberger ]
fred rosenberger
lowercase baba
Bartender

Joined: Oct 02, 2003
Posts: 11308
    
  16

I edited your post to change the second set of 'code' tags to 'quote' tags. the 'code' tags forced your errors to print on one line, making it much wider than the screen. 'quote' tags allow wrapping to the next line, making your post easier to read.


There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors
Rob Spoor
Sheriff

Joined: Oct 27, 2005
Posts: 19693
    
  20

The literal 3 is an integer, not a byte.

It works when you directly assign it (byte b = 3; ) , but if you pass it as a parameter to method you have to explicitly cast it:


Similarly, every decimal literal is a double, and you have to cast it if you're passing it to a method that expects a float.
[ September 28, 2007: Message edited by: Rob Prime ]

SCJP 1.4 - SCJP 6 - SCWCD 5 - OCEEJBD 6
How To Ask Questions How To Answer Questions
O. Ziggy
Ranch Hand

Joined: Oct 02, 2005
Posts: 430

Thanks for your reply. Could you briefly explain why i have to cast it if its passed as a parameter but not if its directly assigned when declared.

And also, i read that a byte has a range of -128 to +127.
Does this mean that a byte can be any number from -127 to +127?

I am a bit confused why the maximum is not 255 since the maximum number in an 8bit binary is 255 i.e. 11111111.

Thanks
O. Ziggy
Ranch Hand

Joined: Oct 02, 2005
Posts: 430

Here is something else that does not make sense to me.

Take a look at the values of the following statement

aWindow.setSize((byte)100);
System.out.println(aWindow.size);

Depending on the value of the byte that is passed in, the output is different as shown below

aWindow.setSize((byte)100) = 100
aWindow.setSize((byte)101) = 101
aWindow.setSize((byte)102) = 102
aWindow.setSize((byte)103) = 103
aWindow.setSize((byte)120) = 120
aWindow.setSize((byte)121) = 121
aWindow.setSize((byte)125) = 125
aWindow.setSize((byte)126) = 126
aWindow.setSize((byte)127) = 127
aWindow.setSize((byte)128) = -128
aWindow.setSize((byte)129) = -127
aWindow.setSize((byte)130) = -126


Is this to do with the range for the byte? (i.e. -128 to 127). I tried the above expecting that the application will produce an error if i try 128 but it didnt. The number changed to negative values. Could you please clarify this for me thanks.
[ September 28, 2007: Message edited by: O. Ziggy ]
fred rosenberger
lowercase baba
Bartender

Joined: Oct 02, 2003
Posts: 11308
    
  16

java (and many other languages) use one of the bits to set the sign of the number - the 'left-most'. so, a number like 127 is stored as

(more leading 0's here) 00000000 01111111

128 is written as

(more leading 0's here) 00000000 10000000

when you scrunch that into a byte, you only get to use 8 bits, giving you
01111111 and 10000000 respectivly.

note that now the leftmost bit is a '1' on what was 128. in a byte, that makes it negative. 129 would be 10000001, still negative.

to learn how to tell WHAT negative number it is, search for the phrase "twos complement".
[ September 28, 2007: Message edited by: Fred Rosenberger ]
Tony Docherty
Bartender

Joined: Aug 07, 2007
Posts: 2285
    
  49
I am a bit confused why the maximum is not 255 since the maximum number in an 8bit binary is 255 i.e. 11111111.
Because the left most bit is used to denote the sign of the number and hence you only have 7 bits remaining to represent a number ie 0 to 127
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 14144
    
  18

Originally posted by O. Ziggy:
Thanks for your reply. Could you briefly explain why i have to cast it if its passed as a parameter but not if its directly assigned when declared.

And also, i read that a byte has a range of -128 to +127.
Does this mean that a byte can be any number from -127 to +127?

I am a bit confused why the maximum is not 255 since the maximum number in an 8bit binary is 255 i.e. 11111111.

Thanks

The signed integer data types: byte, short, int and long are stored in two's complement format in Java - that's why the range for byte is -128 to +127.

In two's complement, 11111111 means -1, not 255.
[ September 29, 2007: Message edited by: Jesper Young ]

Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 7 API documentation
Scala Notes - My blog about Scala
O. Ziggy
Ranch Hand

Joined: Oct 02, 2005
Posts: 430

Thanks all.. i read about twos complement and it now makes sense.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Byte Primitive type