1真的比1小嗎?

2021-05-22 23:32:16 字數 898 閱讀 4484

-1真的比1小嗎?

看到這篇部落格的朋友,此時在想什麼?不妨把現在所想寫出來。

-1比1小,小學生都知道。但是在今天程式設計的時候,我發現了乙個讓我耗費了幾個小時才搞清楚的事情。

事情是這樣的。

class a,有乙個unsigned int getlength()方法,class b同樣有乙個unsigned int getlength()方法。依據a、b建立a、b例項。

char * buff1和char * buff2,buff1-buff2=-1,也就是buff2指向的位址比buff1指向的位址高乙個位元組。

程式中,當(buff1-buff2) < (a.getlength()+b.getlength())時需要執行一些必要的操作。如:

if( (buff1-buff2) < (a.getlength()+b.getlength()) )

在程式執行過程中,列印buff1-buff2的值,為-1,(a.getlength()+b.getlength()) 的值為1,但是,無論如何也進入不了if的條件為true的**段,即上面**的「...」部分。

也許有經驗的人,到此已經知道了問題所在,但是,我卻經過了幾個小時才搞清楚我究竟犯了什麼錯。

其實,問題很簡單,getlength方法返回的值是無符號整型,在比較大小時,編譯器偷偷地為我們做了一件事,她把-1進行了型別提公升為unsigned int型別,因此,-1程式設計了無符號整型中最大的值。從而,我們無論如何都得不到正確的結果。

資料型別的提公升,說起來大家可能都很清楚,但有些時候這種隱蔽的型別轉換,我們還真的要小心。

下面的**,永遠都會對你說:「-1不小於1」

#include

int main(int argc,char * argv)

else

return 0;

}

vue真的比react上手簡單嗎

vue 比 react 容易,因為 vue 提供了很多模板語法或屬性幫你搞定事情,比如 v for v if directive v model watch computed 等。你背下它們的作用就能做事了。但是 react 比 vue 簡單,因為 react 裡面其實只有乙個概念,就是函式。rea...

count 1 比 count 效率高嗎

一直聽同事說mysql的count 1 比 count 要快,其實這兩個的執行效率是一樣的。myisam引擎會把乙個表的總行數記錄下來,所以在執行count 的時候會直接返回數量,執行效率非常快。在mysql 5.5後預設引擎切換為innodb,innodb因為增加了版本控制的原因,同時有多個事務訪...

exists真的就比in的效率高嗎?

系統要求進行sql優化,對效率比較低的sql進行優化,使其執行效率更高,其中要求對sql中的部分in not in修改為exists not exists 修改方法如下 in的sql語句 select id,category id,htmlfile,title,convert varchar 20 ...