無符號數相減得到的是無符號還是有符號?
最近看了有個題目,寫一個函式用來判斷一個字串是否比另一個大,前提是要用到字串庫函式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]有符號數和無符號數符號
- Verilog有符號數、無符號數之間的賦值與運算符號賦值
- java基本無法-識別符號Java符號
- Markdown數學符號符號
- JavaScript >>> 三個大於號無符號右移運算子JavaScript符號
- CSS @ 符號CSS符號
- 符號(註釋符+轉義符+接續符)符號
- 無法解析外部符號:AdjustTokenPrivileges和GetAstncKetState符號AST
- dotNet符號檔案(pdb),符號包(snupkg)和SourceLink符號
- 數學符號的來歷符號
- (2)使用的數學符號符號
- 符號連結符號
- 流程圖符號流程圖符號
- 找不到符號符號
- 識別符號符號
- python 中 *符號Python符號
- 字串切片識別符號是什麼字串符號
- Python多行註釋符號是什麼?Python符號
- VS2017無法解析得外部符號符號
- JavaScript >> 有符號右移運算子JavaScript符號
- MySQL的註釋符號有哪些MySql符號
- math-as-code數學即程式碼:數學符號和程式碼符號有什麼異同?符號
- python 負數去掉符號位Python符號
- Markdown常用數學符號&公式符號公式
- 深入理解ES6--6.符號與符號屬性符號
- package.json 中的版本號,符號 ~ 與 ^ 的區別及其他符號的含義PackageJSON符號
- 什麼是DMN決策模型和符號?模型符號
- latex 屬於符號和根號符號
- 查詢 - 符號表符號
- LaTex弧長符號符號
- 常用特殊符號大全符號
- 對C語言中無符號型別的建議C語言符號型別
- 連結使用的符號符號
- Html/CSS的符號學HTMLCSS符號
- HTML 中的特殊符號HTML符號
- python的識別符號Python符號
- MATLAB符號數學筆記(一)Matlab符號筆記
- 深感數學符號體系的精巧符號
- IDEA出現Cannot resolve symbol “xxx”(無法解析符號)IdeaSymbol符號