|
> 32bitのintの配列2つを結合し、結果の最大64bitの数値を
> 10進数で出力したいのですが、方法をご存知の方がいらっ
> しゃいましたら、教えてください。
#include <stdio.h>
#define NDIGIT 19
static void add(char *s, int x)
{
int i;
for (i = 0; i < NDIGIT; i++)
if (x += s[i]<<4) s[i] = x%10, x /= 10;
}
void print_ll(long *x)
{
char s[NDIGIT] = { 0 }, buf[NDIGIT+2], *p = buf;
long a = x[1], b = x[0];
int i;
if (a < 0)
*p++ = '-', a = ~a+(b==0), b = -b;
for (i = 28; i >= 0; i -= 4)
add(s, a>>i & 15);
for (i = 28; i >= 0; i -= 4)
add(s, b>>i & 15);
for (i = NDIGIT; --i > 0 && s[i]==0; )
;
do *p++ = s[i]+'0'; while (i-- > 0);
*p = '\0';
puts(buf);
}
int main()
{
long a[2] = { 2, 1 };
print_ll(a);
return 0;
}
|