Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Peraturan Promosi C Menentukan Jenis Pulangan Pengendali Aritmetik Perduaan dengan Jenis Integer Bertanda dan Tidak Bertanda Campuran?
Bagaimana Peraturan Promosi Mentadbir Aritmetik Operator Binari dengan Jenis Tanda Campuran
Pertimbangkan kod berikut:
int max = std::numeric_limits<int>::max(); unsigned int one = 1; unsigned int result = max + one;
The operator mengira hasil sebagai 2147483648, mencadangkan int yang tidak ditandatangani sebagai jenis pemulangannya. Sebaliknya, dalam kod berikut:
unsigned int us = 42; int neg = -43; int result = us + neg;
hasilnya ialah -1, menunjukkan jenis pulangan int.
Resolusi Peraturan Promosi
C standard mentakrifkan peraturan promosi khusus untuk pengendali binari aritmetik (C §5/9):
Implikasi untuk Contoh
Dalam kedua-dua contoh, peraturan promosi menghasilkan jenis yang tidak ditandatangani untuk pengiraan operator.
Contoh 1: Kedua-dua maks dan satu dinaikkan pangkat kepada int tidak ditandatangani, menghasilkan jenis pengembalian int tidak ditandatangani.
Contoh 2: Peraturan promosi tidak menentukan pemenang yang jelas antara int dan int yang tidak ditandatangani. Walau bagaimanapun, jenis yang tidak ditandatangani dipilih, yang membawa kepada limpahan yang tidak ditandatangani untuk hasil. Oleh kerana hasil akhirnya ditetapkan kepada int, nilai yang terhasil tidak ditentukan setiap C §4.7/3.
Atas ialah kandungan terperinci Bagaimanakah Peraturan Promosi C Menentukan Jenis Pulangan Pengendali Aritmetik Perduaan dengan Jenis Integer Bertanda dan Tidak Bertanda Campuran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!