GNU/Linux >> Belajar Linux >  >> Linux

Tutorial Pemrograman C 4 - Variabel dan Memori

Dalam seri tutorial ini sejauh ini, kita telah membahas cara membuat dan menjalankan program C dasar, apa itu praprosesor, serta dasar-dasar variabel. Sekarang mari kita menggali lebih jauh ke dalam variabel dan mendiskusikan aspek memori.

Dengan asumsi Anda telah melalui semua tutorial kami sejauh ini (atau Anda memiliki pengetahuan dasar yang diperlukan untuk memahami tutorial ini), mari kita mulai dengan contoh kode sederhana yang kami gunakan di salah satu tutorial kami sebelumnya.

#include <stdio.h>

int main (void)
{
int num = 0, temp=0;
printf("\n Enter a positive integer: ");
scanf("%d", &num);
temp = num;
int result = 1;
while (temp > 0)
{
result = result * temp;
temp = temp -1;
}

printf("\n Factorial of %d is %d\n", num, result);

return 0;
}

Program ini, seperti yang Anda lihat, menghitung faktorial dari angka yang dimasukkan oleh pengguna.

Sekarang, untuk bilangan bulat yang lebih kecil seperti 5 atau 6, program ini akan bekerja dengan baik - ini akan menampilkan hasil faktorial dengan benar. Tapi, katakanlah Anda mencobanya untuk nomor 13. Inilah hasil yang akan Anda dapatkan:

Factorial of 13 is 1932053504

Tapi itu tidak benar karena faktorial dari 13 adalah 6227020800. Jadi, tentu saja, pertanyaannya adalah mengapa program kami memberikan jawaban yang salah? Jawabannya terletak pada jumlah memori yang ditempati oleh variabel int dalam sistem.

Di sebagian besar sistem saat ini, int menempati 4 byte (atau 32 bit) memori. Perhatikan bahwa Anda dapat menggunakan baris berikut dalam program Anda untuk mengetahui jumlah byte yang digunakan int pada sistem Anda.

printf("\n int size in bytes is: %d ", sizeof (int));

Dan karena variabel int juga dapat menyimpan nilai negatif, rentang nilai yang dapat disimpannya bervariasi dari -2.147.483.648 hingga 2.147.483.647.

Sekarang, karena faktorial dari 13 jauh lebih besar dari nilai maksimum yang dapat ditampung oleh variabel int, program kita memberikan output yang salah. Satu-satunya cara untuk memperbaiki program adalah dengan menggunakan jenis variabel yang memiliki kapasitas untuk menampung 6227020800. 

Jika Anda ingin menyimpan nilai bilangan bulat positif yang lebih besar, Anda dapat menggunakan 'unsigned int', yang dapat menyimpan nilai mulai dari 0 hingga 4.294.967.295 (dengan asumsi jenis variabel ini menempati 4 byte di sistem Anda). Tapi di sini, bahkan 'unsigned int' tidak akan berfungsi karena faktorial 13 berada di luar kapasitas maksimalnya.

Jadi penyelamat kita di sini adalah 'panjang panjang', yang menempati memori 8 byte atau 64 bit. Jadi, inilah program yang direvisi:

#include <stdio.h>

int main (void)
{
long long num = 0; long long temp=0;
printf("\n Enter a positive integer: ");
scanf("%d", &num);
temp = num;
long long result = 1;
while (temp > 0)
{
result = result * temp;
temp = temp -1;
}

printf("\n Factorial of %lld is %lld\n", num, result);

return 0;
}

Cara Anda membuat printf atau scanf mengidentifikasi variabel 'panjang panjang' adalah dengan menggunakan %lld (atau %I64d dalam beberapa kasus). Inilah output yang dihasilkan oleh program yang dimodifikasi ini:

Factorial of 13 is 6227020800 

Mana yang benar.

Jadi, sekarang kita tahu batasan 'int' dan bagaimana 'unsigned int' dan 'long long' dapat digunakan untuk mengatasinya. Ingatlah bahwa 'panjang; ' juga merupakan tipe variabel tetapi pada sebagian besar sistem saat ini, int dan long menempati 4 byte.

Oh, dan ya, sementara 'int', 'unsigned int' dan 'long long' adalah untuk bilangan bulat, ada 'float' dan 'double' untuk angka floating point. Float adalah 32 bit dan memiliki presisi 7 digit desimal, sedangkan double adalah 64 bit dan memiliki presisi 15 digit desimal.

Penyebutan angka floating point membawa saya ke poin penting lainnya di sini. Ini terkait dengan divisi. Mari kita ambil contoh kode C sederhana untuk memahami hal ini.

int main (void)
{
int a=5, b=10;

printf("\n a/b is %d", a/b);

return 0;
}

Jadi program ini tidak melakukan apa-apa, tetapi membagi a dengan b, atau 5 dengan 10.

Dalam kehidupan nyata, jika Anda bertanya kepada siapa pun tentang hasil 5/10, Anda akan mendapatkan 0,5 sebagai jawaban di sebagian besar kasus. Tapi di sini, jawabannya akan menjadi nol (0). Alasannya, baik 'a' dan 'b' adalah bilangan bulat, dan karena itu hasil pembagiannya juga akan dianggap sebagai bilangan bulat, sehingga bagian yang mengambang akan diabaikan.

Untuk mempertahankan bagian mengambang, Anda harus memastikan baik 'a' dan 'b' adalah variabel titik mengambang.

#include <stdio.h>

int main (void)
{
float a=5, b=10;

printf("\n a/b is %f", a/b);

return 0;
}

Dalam hal ini, outputnya adalah 0,5.

Dalam tutorial ini, kita membahas tentang ukuran variabel dan bagaimana pengaruhnya terhadap penyimpanan nilai. Saya harap Anda mendapat ide bagus tentang bagaimana dan kapan menggunakan int, unsigned int, long long, float, dan double. Dalam tutorial berikutnya, kita akan membahas variabel tipe karakter serta array.


Linux
  1. Tutorial Perintah Linux nice and renice (7 Contoh)

  2. Tutorial Pemrograman C Bagian 3 - Dasar-dasar Variabel

  3. Tutorial Pemrograman Linux C Bagian 15 - Pelengkap 2s dan Angka Negatif

  1. Tutorial Pemrograman C Bagian 5 - Variabel karakter

  2. Tutorial Pemrograman Linux C Bagian 10 - Lingkup Variabel

  3. Tutorial Pemrograman Linux C Bagian 9 :String

  1. Tutorial Pemrograman Linux C Bagian 12 - Operator Penugasan dan Ekspresi Bersyarat

  2. Tutorial Pemrograman Linux C Part 11 - Operator Aritmatika, Relasional, dan Logika

  3. Membaca Dan Mencari Halaman Man Panjang?