Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Peraturan Promosi C Mengendalikan Operasi Perduaan dengan Integer Bertanda dan Tidak Bertanda?

Bagaimanakah Peraturan Promosi C Mengendalikan Operasi Perduaan dengan Integer Bertanda dan Tidak Bertanda?

Linda Hamilton
Lepaskan: 2024-11-29 14:24:10
asal
598 orang telah melayarinya

How Do C   Promotion Rules Handle Binary Operations with Signed and Unsigned Integers?

Peraturan Promosi dengan Operator Mengendalikan Integer Bertanda dan Tidak Bertanda

Apabila berurusan dengan pengendali binari yang melibatkan tandatangan berbeza antara operan mereka, peraturan promosi yang digariskan dalam C Standard mula bermain. Peraturan ini menentukan jenis operasi yang terhasil dan cara operan ditukar.

Khususnya, "penukaran aritmetik biasa" digunakan di sini (§5/9). Penukaran ini ditarafkan dalam keutamaan menurun:

  1. Berganda panjang (jika ada)
  2. Berganda
  3. Apung
  4. Promosi bersepadu (tukar pendek/int /long long ke int/long/long long)
  5. Unsigned long (jika present)
  6. Int panjang jika panjang boleh mewakili semua nilai int yang tidak ditandatangani, atau int panjang yang tidak ditandatangani sebaliknya
  7. Panjang (jika ada)
  8. Tidak ditandatangani (jika ada)

Menggunakan peraturan ini pada dua senario dibentangkan:

Senario 1:

int max = std::numeric_limits<int>::max();
unsigned int one = 1;
unsigned int result = max + one;
Salin selepas log masuk
  • maks ditandatangani int, satu tidak ditandatangani int
  • Promosi bersepadu berlaku, mengakibatkan maks sebagai int
  • Memandangkan int yang tidak ditandatangani diberi kedudukan lebih tinggi, jenis hasil adalah unsigned int
  • Hasil: unsigned overflow to 2147483648

Senario 2:

unsigned int us = 42;
int neg = -43;
int result = us + neg;
Salin selepas log masuk
  • us is unsigned int ditandatangani int
  • Promosi bersepadu berlaku, menyebabkan kami sebagai int yang tidak ditandatangani, tolak sebagai int
  • Memandangkan int yang tidak ditandatangani berada di kedudukan lebih tinggi, jenis hasil adalah int yang tidak ditandatangani
  • Walau bagaimanapun, nilai daripada kami neg (-1) tidak boleh diwakili dalam int
  • Keputusan: Tingkah laku yang ditentukan pelaksanaan, berkemungkinan kembali -1 atau bergantung pada platform

Atas ialah kandungan terperinci Bagaimanakah Peraturan Promosi C Mengendalikan Operasi Perduaan dengan Integer Bertanda dan Tidak Bertanda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan