0
About (unsigned)
What is the meaning of this statements? int variable1= -5; int take; take=(unsigned)variable1; Can anybody tell me what is the action about (unsigned)?
6 Answers
+ 1
By default, the range of integers is -(2^31) to (2^31-1). That means any number between this range will be easily stored as int. This int range is called signed, which simply means that it will store + and - numbers. (With sign).
Now, sometimes, you deal with only positive numbers. So you may increase the range for your storage. This is done by saving your number to an unsigned int, which will only store positive numbers. Now, your range will become 0 to 2^32-1.
Thus. using (unsigned) means casting, or changing the variable's value to the type specified inside brackets.(unsigned in this case).
Thus, if negative numbers are stored in unsigned variables, they will automatically become 2^32-(value of negative number). This is done because All integers do the same when their limits are crossed. So your take, will store 2^32-5.
+ 2
Yes. Now, you save the 2^32-5 back in a signed int. (Ints are signed by default). So you get -5 again as a result of conversion...
+ 1
Wow amazing.
+ 1
I have one more question. When I print it with %u, it shows me 2^32-5, but when I print it with %d I am getting -5. Why? @Kinshuk Vasisht
+ 1
%u is a format specifier for unsigned ints. It will convert to unsigned, and then print.
%d is for normal numbers (signed).
0
But the problem is that when I am running the program with cout<<take;, I am see -5, not 2^32-5. @Kinshuk Vasisht