Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah C Mengendalikan Promosi Operator Binari dengan Tanda Berbeza?

Bagaimanakah C Mengendalikan Promosi Operator Binari dengan Tanda Berbeza?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-02 08:00:13872semak imbas

How Does C   Handle Binary Operator Promotion with Differing Signedness?

Promosi Operator Binari Apabila Tanda Berbeza

Apabila pengendali binari beroperasi pada operan dengan tanda yang berbeza, standard C menyediakan garis panduan khusus untuk menentukan promosi peraturan dan jenis yang terhasil.

Seksyen 5/9 standard menggariskan "penukaran aritmetik biasa" yang digunakan untuk pengendali sedemikian. Penukaran ini mengikut susunan hierarki:

  1. Jika salah satu operan ialah dua kali panjang, kedua-dua operan ditukar kepada dua kali ganda.
  2. Jika salah satu operan ialah dua kali, kedua-dua operan ditukar kepada dua kali.
  3. Jika salah satu operan terapung, kedua-dua operan ditukar kepada apungan.
  4. Promosi bersepadu dilakukan pada kedua-dua operan.
  5. Jika salah satu operan tidak ditandatangani panjang, kedua-dua operan ditukar kepada panjang tidak ditandatangani.
  6. Jika satu operan panjang int dan yang satu lagi ialah int yang tidak ditandatangani, tentukan sama ada int panjang boleh mewakili semua nilai int yang tidak ditandatangani. Jika ya, tukar int yang tidak ditandatangani kepada int panjang; jika tidak, tukarkan kedua-dua operan kepada int panjang tidak bertanda.
  7. Jika salah satu operan panjang, kedua-dua operan ditukar kepada panjang.
  8. Jika salah satu operan tidak ditandatangani, kedua-dua operan ditukar kepada tidak ditandatangani.
  9. Jika tidak, kedua-dua operan kekal daripada jenis int.

Menggunakan peraturan ini pada contoh kod yang disediakan:

Contoh 1:

unsigned int one = 1;
int max = std::numeric_limits<int>::max();
unsigned int result = max + one;

Memandangkan int yang tidak ditandatangani diutamakan int dalam langkah 5 peraturan, semua operan ditukar kepada int tidak ditandatangani. Oleh itu, keputusan adalah jenis unsigned int.

Contoh 2:

unsigned int us = 42;
int neg = -43;
int result = us + neg;

Dalam kes ini, peraturan menentukan bahawa kedua-dua operan hendaklah ditukar kepada unsigned int. Walau bagaimanapun, nilai yang terhasil (-1) tidak boleh diwakili dalam int yang tidak ditandatangani. Oleh itu, jenis hasil ungkapan ditakrifkan pelaksanaan mengikut §4.7/3.

Atas ialah kandungan terperinci Bagaimanakah C Mengendalikan Promosi Operator Binari dengan Tanda Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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