歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言中的無符號數與有符號數混合運算時隱含轉換問題

C語言中的無符號數與有符號數混合運算時隱含轉換問題

日期:2017/3/1 10:00:34   编辑:Linux編程

//開發平台VC++6.0
#include<stdio.h>
#include<string.h>

int strLonger(char*,char*);

void main(){
char *s = "d";
char *t = "Id";

printf("%d\n",strLonger(s,t));
}

int strLonger(char *s, char *t){
return strlen(s) - strlen(t) > 0;
}
//輸出結果為 1

//其中<string.h>中的strlen()返回unsigned int。

//在C語言中,當一個無符號數和一個有符號數進行比較運算時,有符號數會被隱含地轉換成無符號數,並假設這兩個數都是非負數,然後進行比較運算。

//當把一個有符號數轉換成無符號數時,其底層的二進制表示沒有改變,僅僅是對其進行了不同的解釋。
//所以上述函數中strlen(s)與strlen(t)都是無符號數,strlen(s) - strlen(t) > 0 的運算過程中會把0隱含轉換為無符號數,將整個不等式按照
//無符號數來計算。1-2的16進制為0XFFFFFFFF,如果將其視為無符號數將是一個很大的數值,當然比0大
//所以strLonger()返回1。

Copyright © Linux教程網 All Rights Reserved