Pertanyaan Kurangi bilangan bulat yang ditandatangani dari Unsigned integer [duplikat]


Pertanyaan ini sudah memiliki jawaban di sini:

unsigned int value = 1860;
int data = 1300;
if( (data - value) > 0)
{
    printf("Why it is printing this");
}

output: Mengapa mencetak ini

Saya tidak mengerti mengapa pengurangan formulir bertanda tangan yang tidak ditandatangani melewati "jika" meskipun nilai variabel "data" kurang dari "nilai" variabel. Saya benar-benar ingin tahu bagaimana pengurangan yang ditandatangani dan tidak ditandatangani 'kesalahan kecil' tetapi mengarah ke kesalahan besar karena saya menggunakan fungsi "Penundaan" alih-alih "printf" dan tugas saya semakin tertunda yang menciptakan kekacauan.

unsigned int value = 1860;
int data = 1300;
if( (data - value) > 0)
{
    Delay(data - value);
}

Bagian ini terus menunda dan tugas saya tidak pernah berakhir. Itu berarti nilai "data - nilai" negatif itu sebabnya ia terus menunggu tanpa batas. Bersamaan itu melewati "jika" di mana, kondisi adalah "data-nilai"> 0. Keraguan Saya jika ditandatangani akan dikonversi dalam unsigned dan melewati "jika", maka mengapa itu memberikan nilai negatif untuk fungsi "Penundaan".


5
2018-05-30 05:23


asal


Jawaban:


int tipe data secara default signed di C / C ++ i.e. mendukung angka negatif. Ketika sebuah ekspresi mengandung keduanya signed dan unsigned  int nilai-nilai, yang signed int akan dikonversi secara otomatis menjadi unsigned int dan hasilnya tidak akan kurang dari 0. Apa yang Anda mungkin ingin lakukan adalah ini:

unsigned int value = 1860;
int data = 1300;
if( (signed)(data - value) > 0)
{
    printf("Why it is printing this");
}

Ini secara eksplisit mengubah hasil ekspresi menjadi signed nilai sehingga mungkin angka negatif.


8
2018-05-30 05:29