Menentukan Kemasukan Julat Integer dengan Kecekapan Dipertingkat
Menentukan sama ada integer terletak dalam julat tertentu adalah penting untuk pelbagai aplikasi. Secara tradisinya, pendekatan melibatkan membandingkan integer terhadap sempadan julat menggunakan operator logik (cth., >= dan <=). Walau bagaimanapun, teknik yang dioptimumkan telah muncul, memanfaatkan penukaran integer yang tidak ditandatangani dan perbandingan tunggal.
Pertimbangkan coretan kod:
if ((unsigned)(number - lower) < (upper - lower)) in_range(number);
Di sini, nombor integer ditukar kepada jenis yang tidak ditandatangani menggunakan pelakon (tidak ditandatangani). Penukaran ini menterbalikkan bit tanda jika nombor negatif, pada asasnya menterjemah garis integer kepada asal garis nombor.
Istilah (atas - bawah) mewakili perbezaan julat. Apabila dikira gelung luar, ia menjadi nilai malar, seterusnya mengoptimumkan kelajuan pelaksanaan.
Cerapan utama terletak pada cara integer yang tidak ditandatangani dirawat. Nilai negatif, apabila ditafsirkan sebagai tidak bertanda, menjadi lebih besar daripada nilai positif. Oleh itu, jika (tidak ditandatangani)(nombor - lebih rendah) dinilai sebagai negatif, nombor terletak di bawah lebih rendah. Sebaliknya, jika ia dinilai sebagai lebih besar daripada (atas - bawah), nombor melebihi atas.
Kaedah ini memberikan beberapa faedah berbanding pendekatan tradisional:
Dalam senario dunia sebenar, pengoptimuman ini boleh menghasilkan peningkatan prestasi yang ketara, seperti yang ditunjukkan oleh kelajuan yang diperhatikan dalam kod dikemas kini yang disediakan. Kod yang dipertingkatkan dengan berkesan mengehadkan piksel dalam bulatan dalam segi empat sama, operasi biasa dalam fungsi kabur kotak.
Atas ialah kandungan terperinci Bagaimanakah Penukaran Integer Tidak Ditandatangani Boleh Mengoptimumkan Semakan Julat Integer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!