mainajaved
mainajaved

Reputation: 8173

Displaying very large number

As we know that 4294967295 is the largest number in unsigned int if I multiply this number by itself then how to display it? I have tried:

long unsigned int NUMBER = 4294967295 * 4294967295;

but still getting 1 as answer.

Upvotes: 2

Views: 1505

Answers (4)

mloskot
mloskot

Reputation: 38912

The multiplication overflows.

#include <stdio.h>
int main()
{
    unsigned int a = 4294967295;
    unsigned int b = 4294967295;

    // force to perform multiplication based on larger type than unsigned int
    unsigned long long NUMBER = (unsigned long long)a * b;
    printf("%llu\n", NUMBER);
}

Upvotes: 1

James Webster
James Webster

Reputation: 32066

You state in your question that you know max int is equal to 4294967295. That means that you can't store a number larger than that if you are using unsigned int.

C longs store up to 18,446,744,073,709,551,615 when unsigned on a 64 bit unix system [source] so you need only suffix your numbers with UL : 4294967295UL

If you aren't using a 64-bit unix system then you should use long long unsigned int and suffix with LL

Upvotes: 0

Mark Byers
Mark Byers

Reputation: 838156

You are getting an overflow. Consider the muplication in hexadecimal:

0xffffffff * 0xffffffff == 0xfffffffe00000001
                                     ^^^^^^^^
                                     only the last 32 bits are returned

The solution is to use a larger type such as long long unsigned:

long long unsigned int NUMBER = 4294967295ULL * 4294967295ULL;

The suffix ULL means unsigned long long.

See it working online: ideone

Upvotes: 3

Dong
Dong

Reputation: 11

Yes, it's an overflow. If you are using c, there isn't any easy way to do such big number multiply as i knew. Maybe you need write one by yourself. In fact some language support such features originally.

Upvotes: -1

Related Questions