Tôi đang cố gắng sử dụng số nguyên 64 bit trong C, nhưng tôi nhận được tín hiệu hỗn hợp về việc liệu nó có khả thi hay không.Làm thế nào để xác định số nguyên 64 bit trong c
Khi tôi thực hiện printf:
printf("Size of long int:%d\nSize of long long int:%d\n\n",(int)sizeof(long int), (int)sizeof(long long int));
Câu trả lời tôi nhận được là:
Kích thước dài int: 4 Kích thước dài dài int: 8
Điều này làm cho tôi cảm thấy rằng một int dài dài có 8 byte = 64 bit.
Tuy nhiên, khi tôi cố gắng để khai báo các biến sau:
long long int a2 = 0x00004444;
long long int b2 = 0x000044440;
long long int c2 = 0x0000444400;
long long int d2 = 0x00004444000;
long long int e2 = 0x000044440000;
long long int f2 = 0x0000444400004;
long long int g2 = 0x00004444000044;
long long int h2 = 0x000044440000444;
long long int i2 = 0x0000444400004444;
4 biến qua (f2, g2, h2, i2) cho tôi thông báo lỗi:
cảnh báo: hằng số nguyên quá lớn đối với loại 'dài'
Tôi nhận được kết quả tương tự khi tôi thay thế 'long long int' bằng 'int64_t'. Tôi cho rằng 'int64_t' đã được nhận ra, vì nó không tạo ra bất kỳ thông báo lỗi nào của chính nó.
Vì vậy, nó xuất hiện 8 byte dài dài của tôi int thực sự là một dài 6 byte int dài, và tôi không hiểu những gì tôi đang thiếu ở đây. Nếu đó là bất kỳ trợ giúp nào, dưới đây là thông tin về trình biên dịch gcc của tôi:
[email protected]:~$ gcc -v
Using built-in specs.
Target: i686-linux-gnu
Configured with: ../src/configure -v
--with-pkgversion='Ubuntu/Linaro 4.4.4-14ubuntu5'
--with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++
--prefix=/usr
--program-suffix=-4.4
--enable-shared
--enable-multiarch
--enable-linker-build-id
--with-system-zlib
--libexecdir=/usr/lib
--without-included-gettext
--enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.4
--libdir=/usr/lib
--enable-nls
--with-sysroot=/ -
-enable-clocale=gnu
--enable-libstdcxx-debug
--enable-objc-gc
--enable-targets=all
--disable-werror
--with-arch-32=i686
--with-tune=generic
--enable-checking=release
--build=i686-linux-gnu
--host=i686-linux-gnu
--target=i686-linux-gnu
Thread model: posix
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
Nếu có ai biết (hoặc nếu) số nguyên 64 bit có thể truy cập được với tôi, tôi thực sự đánh giá cao bất kỳ trợ giúp nào. Cảm ơn ....
Bạn quên a ',' trong 'printf' của bạn. –
Như là một thay thế cho hậu tố 'LL', biên dịch với' -std = c99' cũng nên hoạt động. Trong C99, hằng số nguyên thập lục phân có loại 'long long int' hoặc' unsigned long long int' nếu nó quá lớn để vừa với '(unsigned) long int', nhưng khớp với' (unsigned) long long int'. Không có hậu tố cần thiết. –
Một điểm, cần được đề cập ở đây, đó là vấn đề không phải là các biến int dài 'f2' đến' i2', mà là các số nguyên nguyên mà bạn đã chỉ định. Trong C89 một số nguyên mà không có hậu tố được chỉ định là kiểu 'int' nếu giá trị đã cho phù hợp với loại đó, nếu không thì nó có kiểu' long int'. Vấn đề là, '0x0000444400004' không phù hợp với' int' hoặc 'long int' và đây là những gì trình biên dịch phàn nàn. Bài tập không phải là vấn đề ở đây, bạn gán một 'long int' cho một' long long int'. Như Daniel viết, c99 giải quyết vấn đề này bằng cách cho phép các chữ 'dài dài'. – Sascha