File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Beginning Java and the fly likes 2's complement Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "2 Watch "2 New topic

2's complement

Rameshwar Soni
Ranch Hand

Joined: Feb 03, 2011
Posts: 247
I know there are various pages written on this topic but i am not getting a very simple answer and hence getting confused
when i store 4 in an integer variable it is definitely stored in binary format i.e no 1's and 2's complement is used and the standard conversion way of decimal to binary is used
but when i store -4 why 2's complement is used??
I know how to find 2's complement of a number..... my question is WHY 2'S COMPLEMENT???
Manuel Petermann
Ranch Hand

Joined: Jul 19, 2011
Posts: 177

How else would you store negative values without having one or more mapped twice?
This and the feature that you can easily add/sub and check of correctness is why.

Please correct my English.
Campbell Ritchie

Joined: Oct 13, 2005
Posts: 46397
No, every integer in Java™ except a char uses two's complement. Exactly half the possible values are reserved for negative numbers and exactly half for non-negative numbers. The value of the non-negative numbers is the same as an unsigned number would be, but that is still two's complement.
Angus Comber
Ranch Hand

Joined: Jul 16, 2011
Posts: 90
You are probably better to learn about how computers store data first. this is not really a Java question.

Just to get you started Java stores an int as a signed 32 bit value.

ie the decimal 1 will be stored (at the bit level) as:
00000000 00000000 00000000 00000001 (spaces used purely for formatting)

the decimal minus 1 (-1) is stored like this:
11111111 11111111 11111111 11111111

See if you can figure out why.

Also, why is it that if Java stored numbers as unsigned then the maximum value would double?

My examples assume that your computer uses twos complement.
Campbell Ritchie

Joined: Oct 13, 2005
Posts: 46397
Angus Comber wrote: . . . My examples assume that your computer uses twos complement.
Not twos complement, but two's complement. And I have added [tt] tags to your numbers to improve the spacing. It changes 11111111 to 11111111 and 10101010 to 10101010.

If he is using Java™ then he is definitely using two's complement arithmetic for all integers except the char.
Campbell Ritchie

Joined: Oct 13, 2005
Posts: 46397
Because two's complement is the only representation of negative numbers which permits the same chip to be used for addition and subtraction.
Because two's complement allows us to fit 256 different numbers into 8 bits whereas S&M only fits 255 numbers into the same 8 bits.
I agree. Here's the link:
subject: 2's complement
It's not a secret anymore!