国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

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

2020-01-26 14:21:28
字體:
來源:轉載
供稿:網友

我很早之前就知道,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的運算全部內容了,希望大家多多支持武林網~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 育儿| 灵丘县| 彭泽县| 蒙城县| 内乡县| 阿勒泰市| 达尔| 梁平县| 偏关县| 东兴市| 闵行区| 惠东县| 汶川县| 筠连县| 察隅县| 汝南县| 康平县| 包头市| 容城县| 武穴市| 抚顺市| 富裕县| 夹江县| 本溪| 如东县| 安吉县| 桃园县| 河津市| 调兵山市| 海盐县| 天台县| 黔西| 拜城县| 平阴县| 淄博市| 武邑县| 延川县| 海口市| 方山县| 精河县| 封开县|