top page > la vie en rose > here

long long の利用法


概要

i386 + gcc にて,8 バイト整数 (long long) を利用する.

対象は次のようなものです.

  1. OS は FreeBSD の 2 系以降 (FreeBSD/i386, /pc98, /amd64)
  2. CPU は i386
  3. gcc は version 2, 3, 4

目次

1. 概説
2. 資料

1. 概説

FreeBSD/i386 用の gcc の整数には,short (16bit),int (32bit),long (32bit),long long (64bit) およびそれらの unsigned があります.

long long は次のように利用します.

#include <stdio.h>

int main(void)
{
   long long t;
   unsigned long long u;

   t = 314159265358979323LL;      /*  定数には LL を付ける. */
   u = 314159265358979323ULL;     /*  定数には ULL を付ける. */

   printf("t = %lld\n",t);  /* 入出力の書式は ll を付加する.  */
   printf("u = %llu\n",u);  /* 入出力の書式は ll を付加する.  */

   return 0;
}

どこかに例示されていたのですが,long long である変数の入出力の書式に qd のように q を付加しても正常に動作します. しかし,これは本来 long long ではなく quad_t, u_quad_t のための書式であり,またマニュアルには "deprecated" と書かれているので,使わない方が良いでしょう.

(補足) FreeBSD/amd64 用の gcc では long は 64bit であり,long long と同じです. long の入出力のに書式には l を,また定数には l または L を付加します.

2. 資料

上記の情報は,以下の man page では見つかりませんでした.

% man printf

こちらにならあります.

% man scanf
% man vfprintf
% man vfscanf

libc のソースはこちらにあります.

/usr/src/lib/libc/stdio/vfprintf.c
/usr/src/lib/libc/stdio/vfscanf.c