C Programming - Complicated Declarations - Discussion

Discussion Forum : Complicated Declarations - Find Output of Program (Q.No. 7)
7.
What will be the output of the program?
#include<stdio.h>
typedef unsigned long int uli;
typedef uli u;

int main()
{
    uli a;
    u b = -1;
    a = -1;
    printf("%lu, %lu", a, b);
    return 0;
}
4343445454, 4343445454
4545455434, 4545455434
4294967295, 4294967295
Garbage values
Answer: Option
Explanation:

The system will treat the negative numbers with 2's complement method.

For 'long int' system will occupy 4 bytes (32 bits).

Therefore,

Binary 1 : 00000000 00000000 00000000 00000001

To represent -1, system uses the 2's complement value of 1. Add 1 to the 1's complement result to obtain 2's complement of 1.

So, First take 1's complement of binary 1 (change all 0s to 1s and all 1s to 0s)

1's complement of Binary 1:

11111111 11111111 11111111 11111110

2's complement of Binary 1: (Add 1 with the above result)

11111111 11111111 11111111 11111111


In HexaDecimal

11111111 11111111 11111111 11111111 = FFFF FFFF FFFF FFFF

In Unsigned Integer

11111111 11111111 11111111 11111111 = 4294967295.

Discussion:
8 comments Page 1 of 1.

Nandu said:   1 decade ago
Unsigned integer means I mean how we can change ffff ffff ffff ffff to 4294967295. Please anyone explain.

Vanita said:   1 decade ago
Quite confusing can any one explain it properly?

Ranjitha said:   1 decade ago
May I know how to convert hexadecimal to unsigned integer ?

Ranjitha said:   1 decade ago
May I know how to convert hexadecimal to unsigned int ?

Sandy said:   1 decade ago
Guys its taking the maximum range of unsigned numbers.

In 32 bit machine, maximum range of unsigned int is 4294967295.

Roshni said:   10 years ago
Please answer this question immediately, how to convert the hexadecimal to unsigned integer manually? Explain the method.

Neha said:   9 years ago
Please, anybody explain the method of conversion of hexadecimal to unsigned int.

Andrey said:   2 weeks ago
Unsigned long is not 32 bit long. It is at least 32 bit long. It can occupy 32 bits, 64 bits, or even 128 bits.

So the values will be more like a garbage. It depends on the operating system and on the system's architecture.

And it will be a surprise if some architecture have the CHAR_BIT value greater than 8, but it's possible too.

Post your comments here:

Your comments will be displayed after verification.