Tôi đang sử dụng Code::Blocks với GCC 4.4.1 và dường như tôi không thể in số nguyên được ký 64 bit từ mã C của tôi.Làm thế nào để in số nguyên 64 bit trong GCC 4.4.1?
Mã này:
long long longint;
longint = 0x1BCDEFABCDEFCDEF; /* 2003520930423229935 */
printf("Sizeof: %d-bit\n", sizeof(longint) * 8); /* Correct */
printf("%llx\n", longint); /* Incorrect */
printf("%x%x\n", *(((int*)(&longint))+1), longint); /* Correct */
printf("%lld\n", longint); /* Incorrect */
Tạo đầu ra:
Sizeof: 64-bit
cdefcdef
1bcdefabcdefcdef
-839922193
64-bit số học dường như làm việc một cách chính xác:
longint -= 0x1000000000000000;
printf("%x%x\n", *(((int*)(&longint))+1), longint);
Cung cấp:
bcdefabcdefcdef
Tôi có thiếu gì đó không?
có thể trùng lặp của [câu hỏi này] (http://stackoverflow.com/questions/2844/how-do-you-printf-an-unsigned-long- dài-int). – npclaudiu
Printf thứ hai không chính xác như thế nào? Ah, tôi thấy trong ví dụ bây giờ. Đừng bận tâm. Ví dụ in ra giá trị phù hợp với tôi trên Linux. –
@npclaudiu - Cảm ơn. Tôi đã nhận nó từ đó! – Fenikso