Predict the output of following program. Assume that the numbers are stored in 2’s complement form.
#include<stdio.h>
int main()
{
unsigned int x = -1;
int y = ~0;
if (x == y)
printf("same");
else
printf("not same");
return 0;
}
(A) same
(B) not same
Answer: (A)
Explanation: -1 and ~0 essentially have same bit pattern, hence x and y must be same. In the comparison, y is promoted to unsigned and compared against x (See this for promotion rules). The result is “same”. However, when interpreted as signed and unsigned their numerical values will differ. x is MAXUNIT and y is -1. Since we have %u for y also, the output will be MAXUNIT and MAXUNIT.
#include<stdio.h>
int main()
{
unsigned int x = -1;
int y = ~0;
if (x == y)
printf("same");
else
printf("not same");
return 0;
}
(A) same
(B) not same
Answer: (A)
Explanation: -1 and ~0 essentially have same bit pattern, hence x and y must be same. In the comparison, y is promoted to unsigned and compared against x (See this for promotion rules). The result is “same”. However, when interpreted as signed and unsigned their numerical values will differ. x is MAXUNIT and y is -1. Since we have %u for y also, the output will be MAXUNIT and MAXUNIT.
No comments:
Post a Comment