Mengapakah coretan kod gagal apabila menetapkan literal integer besar kepada pembolehubah `panjang`, tetapi berfungsi apabila menggunakan `panjang panjang`?

DDD
Lepaskan: 2024-11-08 11:12:02
asal
253 orang telah melayarinya

Why does the code snippet fail when assigning a large integer literal to a `long` variable, but works when using `long long`?

Memahami Gelagat 'long long' dalam C/C

Apabila bekerja dengan jenis data integer dalam C/C , adalah penting untuk memahami nuansa perwakilan integer. Satu jenis data khusus, 'long long', sering menimbulkan persoalan tentang kelakuannya.

Pertimbangkan coretan kod berikut:

#include <stdio.h>

int main() {
    int num1 = 1000000000;
    long num2 = 1000000000;
    long long num3;
    // num3 = 100000000000;
    long long num4 = ~0;

    printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3));
    printf("%d %ld %lld %llu", num1, num2, num3, num4);

    return 0;
}
Salin selepas log masuk

Apabila melaksanakan kod ini, anda mungkin menghadapi ralat jika anda nyahkomen baris yang diulas:

// num3 = 100000000000;
Salin selepas log masuk

Ralat berbunyi:

"ralat: pemalar integer terlalu besar untuk jenis panjang"

Walau bagaimanapun, apabila anda menyusun dan menjalankan kod tanpa menyahkomen baris itu, ia mengeluarkan nilai yang jauh lebih besar daripada 10000000000. Mengapa?

Memahami Huruf Integer dan Data Jenis

Dalam C/C , literal integer ialah pemalar yang mewakili nilai angka. Jenis literal integer ditentukan oleh akhiran, seperti 'L' atau 'LL'. Tanpa akhiran, literal dianggap sebagai 'int' secara lalai.

Dalam kod yang disediakan, nilai '100000000000' terlalu besar untuk diwakili dalam jenis data 'panjang'. Oleh itu, anda mesti menambah akhiran untuk menunjukkan jenis data yang dimaksudkan.

Menetapkan Huruf Dengan Betul

Untuk menyelesaikan ralat, anda harus menetapkan literal menggunakan akhiran yang betul , seperti yang ditunjukkan di bawah:

long long num3 = 100000000000LL;
Salin selepas log masuk

Akhiran 'LL' menandakan bahawa literal harus dianggap sebagai 'panjang jenis long', yang boleh menampung julat nilai yang lebih besar.

Barisan yang dikemas kini memberikan nilai '100000000000' kepada 'num3' tanpa mencetuskan ralat. Ini memastikan pembolehubah 'num3' boleh memegang dan beroperasi pada nilai angka besar yang dimaksudkan.

Atas ialah kandungan terperinci Mengapakah coretan kod gagal apabila menetapkan literal integer besar kepada pembolehubah `panjang`, tetapi berfungsi apabila menggunakan `panjang panjang`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan