無符號數相減得到的是無符號還是有符號?
最近看了有個題目,寫一個函式用來判斷一個字串是否比另一個大,前提是要用到字串庫函式strlen,它給出個答案
這個答案在某種情況下會出錯,並且解釋為什麼會出錯怎麼修改。
提示說strlen返回的是unsigned型別,我當時第一反應是如何s字串長度比t的小,那麼兩個無符號的數相減是一個有符號的負數呢,還是一個無符號的數,如果是有符號那就沒有問題,無符號當然就會有問題了,為了解決疑惑,做了以下實驗:
1. s = "abc", t = "abcd", strlonger返回值為1;
2. 在1的條件下,修改return語句,(unsigned)(strlen(s) - strlen(t)) < 0, strlonger返回值為0;
3. 在1的條件下,修改return語句,strlen(s) - strlen(t) < 0u, strlonger返回值為0;
由此可推斷兩個無符號相減是有符號的,那麼本題到底有哪裡有問題呢?那就是無符號值的表達範圍Max_int比有符號大,再xian
-
int strlonger(char *s, char* t)
-
{
-
return strlen(s) - strlen(t) < 0;
- }
提示說strlen返回的是unsigned型別,我當時第一反應是如何s字串長度比t的小,那麼兩個無符號的數相減是一個有符號的負數呢,還是一個無符號的數,如果是有符號那就沒有問題,無符號當然就會有問題了,為了解決疑惑,做了以下實驗:
1. s = "abc", t = "abcd", strlonger返回值為1;
2. 在1的條件下,修改return語句,(unsigned)(strlen(s) - strlen(t)) < 0, strlonger返回值為0;
3. 在1的條件下,修改return語句,strlen(s) - strlen(t) < 0u, strlonger返回值為0;
由此可推斷兩個無符號相減是有符號的,那麼本題到底有哪裡有問題呢?那就是無符號值的表達範圍Max_int比有符號大,再xian
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29444108/viewspace-1140422/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [C]有符號數和無符號數符號
- 關於有符號與無符號的位元組符號
- C語言系列(二)有符號數和無符號數詳解C語言符號
- C語言之有符號無符號整數取值範圍C語言符號
- 無法解析的外部符號符號
- kingofark's Ineffective C/C++:自白2:有符號、無符號還有位運算,我的天! (轉)GoC++符號
- java基本無法-識別符號Java符號
- JavaScript 32位整型無符號操作JavaScript符號
- Markdown數學符號符號
- JavaScript >>> 三個大於號無符號右移運算子JavaScript符號
- CSS @ 符號CSS符號
- 特殊符號符號
- 符號使用符號
- 符號(註釋符+轉義符+接續符)符號
- C++中實現無符號右移C++符號
- (2)使用的數學符號符號
- 數學符號的來歷符號
- 符號連結符號
- Google Map 符號Go符號
- Html 特殊符號HTML符號
- PHP基本符號PHP符號
- Shell 符號(轉)符號
- ORA-00904: : 識別符號無效符號
- Perl 的特殊符號符號
- JavaScript >> 有符號右移運算子JavaScript符號
- MySQL的註釋符號有哪些MySql符號
- math-as-code數學即程式碼:數學符號和程式碼符號有什麼異同?符號
- Markdown常用數學符號&公式符號公式
- 什麼是DMN決策模型和符號?模型符號
- Python多行註釋符號是什麼?Python符號
- 深入理解ES6--6.符號與符號屬性符號
- dotNet符號檔案(pdb),符號包(snupkg)和SourceLink符號
- latex 屬於符號和根號符號
- 正則中括號點符號符號
- 查詢 - 符號表符號
- python 中 *符號Python符號
- JavaScript 識別符號JavaScript符號
- 對C語言中無符號型別的建議C語言符號型別