C Programming - Expressions - Discussion
Discussion Forum : Expressions - Find Output of Program (Q.No. 2)
2.
Assuming, integer is 2 byte, What will be the output of the program?
#include<stdio.h>
int main()
{
printf("%x\n", -2<<2);
return 0;
}
Answer: Option
Explanation:
The integer value 2 is represented as 00000000 00000010 in binary system.
Negative numbers are represented in 2's complement method.
1's complement of 00000000 00000010 is 11111111 11111101 (Change all 0s to 1 and 1s to 0).
2's complement of 00000000 00000010 is 11111111 11111110 (Add 1 to 1's complement to obtain the 2's complement value).
Therefore, in binary we represent -2 as: 11111111 11111110.
After left shifting it by 2 bits we obtain: 11111111 11111000, and it is equal to "fff8" in hexadecimal system.
Negative numbers are represented in 2's complement method.
1's complement of 00000000 00000010 is 11111111 11111101 (Change all 0s to 1 and 1s to 0).
2's complement of 00000000 00000010 is 11111111 11111110 (Add 1 to 1's complement to obtain the 2's complement value).
Therefore, in binary we represent -2 as: 11111111 11111110.
After left shifting it by 2 bits we obtain: 11111111 11111000, and it is equal to "fff8" in hexadecimal system.
Discussion:
33 comments Page 2 of 4.
Saisudha said:
1 decade ago
How is left shifting done? Can anyone please explain it?
Nitesh Alashe said:
10 years ago
Firstly 2: 0000 0000 0000 0010.
Make complement of 2 we get -2: 1111 1111 1111 1101 (All 0's to 1 and 1's to 0).
Then add 1 in that, then it becomes +1: 1111 1111 1111 1110.
As there is << operator which is pointing towards right to left.
So add 2 zero's to right it becomes 1111 1111 1111 1000 which is FFF8.
So option C.
Make complement of 2 we get -2: 1111 1111 1111 1101 (All 0's to 1 and 1's to 0).
Then add 1 in that, then it becomes +1: 1111 1111 1111 1110.
As there is << operator which is pointing towards right to left.
So add 2 zero's to right it becomes 1111 1111 1111 1000 which is FFF8.
So option C.
VENKAT said:
10 years ago
In above explanation why you added only two zeros please can you explain?
Sowndarya said:
9 years ago
Hai, I have a doubt.
What is the use of %x?
What is the use of %x?
Narayan said:
9 years ago
@ all who haven't got this-.
In left shifting we will shift by the numbers given on the right side of operator.
Example -: -2<<2.
So here we will left shift the binary value of 2 by 2 digits and add 2 zeros to the right hand side, since 2 is present on the right hand side of operator, so we add 2 zeros to the right.
In left shifting we will shift by the numbers given on the right side of operator.
Example -: -2<<2.
So here we will left shift the binary value of 2 by 2 digits and add 2 zeros to the right hand side, since 2 is present on the right hand side of operator, so we add 2 zeros to the right.
Divya said:
9 years ago
We have different format specifiers for int - %d, float - %f, char - %c. etc.,
In the same way %x represents a hexagonal number.
In the same way %x represents a hexagonal number.
Vikranth said:
9 years ago
How the left shift is done for above problem can anyone explain it?
Vino said:
9 years ago
Why do we need to take 2's complement form?
Vino said:
9 years ago
Why we need to take 2's complement?
Tamilselvi said:
8 years ago
How it is equal to fff8?
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers