Home » C Programming » Complicated Declarations

What will be the output of the program? #include typedef unsigned long int uli; typedef uli u; int main() { uli a; u b = -1; a = -1; printf("%lu, %lu", a, b); return 0; }

Correct Answer: 4294967295, 4294967295

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.


← Previous Question Next Question→

Discussion & Comments

No comments yet. Be the first to comment!
Join Discussion