Gelagat Limpahan Integer dalam Integer Ditandatangani dan Tidak Ditandatangani
Latar Belakang
Apabila bekerja dengan integer in C , adalah penting untuk memahami gelagat limpahan integer, yang berlaku apabila nilai integer melebihi nilai maksimum atau minimum yang boleh diwakili. Artikel ini bertujuan untuk menerangkan hasil berbeza limpahan integer yang ditandatangani dan tidak ditandatangani, berdasarkan hasil yang diperhatikan dalam program tertentu.
Program dan Output
Program berikut ialah digunakan untuk menguji limpahan integer:
#include <iostream> int main() { int x(0); std::cout << x << std::endl; x = x + 2147483647; std::cout << x << std::endl; x = x + 1; std::cout << x << std::endl; std::cout << std::endl; unsigned int y(0); std::cout << y << std::endl; y = y + 4294967295; std::cout << y << std::endl; y = y + 1; std::cout << y << std::endl; }
Atur cara menghasilkan yang berikut output:
0 2147483647 -2147483648 0 4294967295 0
Penjelasan
Limpahan Integer Bertanda
Limpahan integer yang ditandatangani ialah gelagat yang tidak ditentukan dalam C . Ini bermakna hasilnya tidak terjamin dan bergantung kepada pelaksanaan. Dalam kes ini, nilai x selepas operasi kenaikan kedua dibalut kepada nilai minimum negatif jenis data, menghasilkan -2147483648. Ini kerana kebanyakan pelaksanaan menggunakan perwakilan pelengkap 2 untuk integer yang ditandatangani.
Limpahan Integer Tidak Ditandatangani
Limpahan integer tidak ditandatangani ditakrifkan dengan baik dalam C . Hasilnya dikira dengan aritmetik modulo, di mana nilainya membungkus kepada nilai minimum jenis data. Dalam kes ini, nilai y selepas operasi kenaikan kedua dililitkan kepada 0.
Ringkasan
Ringkasnya, limpahan integer yang ditandatangani ialah kelakuan tidak ditentukan, manakala integer tidak ditandatangani limpahan ditakrifkan dengan baik dan menghasilkan pembungkusan nilai. Oleh itu, adalah penting untuk mengendalikan limpahan integer dengan berhati-hati dalam program C untuk mengelakkan hasil yang tidak dijangka.
Atas ialah kandungan terperinci Bagaimanakah limpahan integer yang ditandatangani dan tidak ditandatangani berbeza dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!