有符號變量與無符號變量的區別和聯繫如下所示:
#include<stdio.h>
char getChar(int x, int y)
{
char c;
unsigned int a=x;
(a+y>10)?(c=1):(c=2);
return c;
}
int main(void)
{
char c1=getChar(7,4);
char c2=getChar(7,3);
char c3=getChar(7,-7);
char c4=getChar(7,-8);
printf("c1=%d\n",c1);
printf("c2=%d\n",c2);
printf("c3=%d\n",c3);
printf("c4=%d\n",c4);
return 0;
}
首先說明getChar()函數的作用:它有兩個輸入參數,分別是整型的x和y。在函數體內,把參數x的值轉換為無符號整型後再與y相加,其結果與10進行比較,如果大於10,則函數返回1,否則返回2。
在這裡,我們要注意:所有的操作數都自動轉換成無符號類型。因此,這裡由於a是無符號數,y值會首先自動轉換成無符號的整數,然後與a相加,最後再與10進行比較。以下是在main函數中各調用getChar()函數的分析。
我們可以看到,由於無符號整數的特性,getChar()當參數x為7時,如果y等於區間[-7,3]中的任何整數值,getChar()函數都將返回2。當y的值在區間[-7,3]之外時,函數返回-1。
輸出結果如下:
c1 = 1
c2 = 2
c3 = 2
c4 = 1
總之,我們在看表達式時要很小心地注意符號變量與無符號變量之間的轉換,佔用不同字節內存的變量之間的賦值等操作,否則可能會出現我們意想不到的結果。看到這裡,有符號變量與無符號變量值的轉換,你都學會了嗎?