Civil Engineering Mechanical Engineering Chemical Engineering Networking Database Questions Computer Science Basic Electronics Digital Electronics Electronic Devices Circuit Simulation Electrical Enigneering Engineering Mechanics Technical Drawing

# C Programming - Complicated Declarations - Discussion

@ : Home > C Programming > Complicated Declarations > Find Output of Program - Discussion

"You cannot shake hands with a clenched fist."
- Indira Gandhi
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;
}

 [A]. 4343445454, 4343445454 [B]. 4545455434, 4545455434 [C]. 4294967295, 4294967295 [D]. Garbage values

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

11111111 11111111 11111111 11111111 = FFFF FFFF FFFF FFFF

In Unsigned Integer

11111111 11111111 11111111 11111111 = 4294967295.

 Nandu said: (Tue, Dec 27, 2011 08:40:12 PM) Unsigned integer means I mean how we can change ffff ffff ffff ffff to 4294967295. Please anyone explain.

 Vanita said: (Thu, Feb 9, 2012 02:52:27 PM) Quite confusing can any one explain it properly?