程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 淺談防不勝防的unsigned int的運算

淺談防不勝防的unsigned int的運算

編輯:關於C++

淺談防不勝防的unsigned int的運算。本站提示廣大學習愛好者:(淺談防不勝防的unsigned int的運算)文章只能為提供參考,不一定能成為您想要的結果。以下是淺談防不勝防的unsigned int的運算正文


我很早之前就知道,unsigned int與int運算的時分,int會被轉化為unsigned int來停止運算。不斷覺得定這條規則的人是極度反人類的,雖說unsigned int可以表示更大的正值,但畢竟我們不太會把unsinged想像成一個正數,而一個負的int數能夠在有意間就變成了最大的負數。

所以,我對這個問題很慎重。小心翼翼地,不斷沒怎樣出差錯。直到有一天。

第一回合

那是一個陽黑暗媚的午後,我正惬意地刷leetcode。要遍歷vector中除最後一個元素的一切元素。我這樣寫道:

for(int i=0;i<nums.size()-1;++i)
  bulabula;

沒什麼錯吧?沒錯!提交的時分發現順序呈現了內存訪問錯誤。

作為一個自信的順序員,我自然想到了編譯器出了問題。於是在VS上測試,是沒有問題的!Stupid Leetcode!竟然說我的代碼有問題,我的代碼怎樣能夠有問題?

就在我要保持這一題的時分,我忽然想到了邊界條件,於是把nums清空再測試,VS提示內存訪問錯誤。Soryy Leetcode,是在下輸了……

在停止一番絞盡腦汁之後,我把目光聚焦在了size_t,查了材料後發現,size_t就是個unsigned類型,豁然開朗……nums.size()-1就等於最大的負數,i與之比擬,一定是契合條件的!OH NO!

第二回合

在閱歷了上述事情之後,我普通會這麼寫順序:

for(int i=0;i<(int)nums.size()-1;++i)
  bulabula;

再也沒有呈現過問題。每次看到他人還寫我之前那樣的代碼,我都會會意一笑,然後通知別人的我心得。直到有一天,我看到一個大牛寫了這樣的代碼:

for(int i=nums.size()-1;i>=0;--i)
  bulabula;

我想我發現了大牛的錯誤。有了上次的經驗,這次我測試了一下邊界條件。什麼?竟然正常運轉?

在想了很久之後,我得出以下結論:nums.size()-1確實失掉了一個最大的unsigned int,可是把它賦給int的時分,編譯器就傻傻地直接把unsigned int賦給了int,於是int就為-1了。大牛畢竟是大牛……

在學知識的路途上總會有羊腸大道,多走一些羊腸大道,我才干知道有沒有近道!加油加油!

以上就是為大家帶來的淺談防不勝防的unsigned int的運算全部內容了,希望大家多多支持~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved