為什么if(-1)為真-創(chuàng)新互聯

@TOC

成都創(chuàng)新互聯公司成立于2013年,先為高坪等服務建站,高坪等地企業(yè),進行企業(yè)商務咨詢服務。為高坪企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。前言

在寫程序時候發(fā)現不管是if(1) if(-1)都為真,if(0)為假

測試程序
#includeint main(int argc, char *argv[]) {int a = 0;
    if(a) {a = 3;
    }
    if(argc != 0) {a=1;
    }
    if (argc == 0) {a=2;
    }
    return 0;
}
clion查看匯編

在debug模式下 gdb查看匯編

disassemble

在這里插入圖片描述
可以看到當只有一個參數的時候,是默認和0進行比較,不等于0就為真
je:Jump if equal (ZF=1)。
cmp 如果源操作數和目的操作數是相同的,則結果為0,ZF=1。

另一個問題

上面是正常寫程序的寫法,換一種方法看看

#includeint main(int argc, char *argv[]) {int a = 0;
    if(0) {a = 3;
    }
    return 0;
}

在這里插入圖片描述
可以看到已經沒有cmp指令了,編譯器自動幫我們優(yōu)化這個恒定為假的判斷條件,提升效率

參考文章

https://blog.csdn.net/qq_42138566/article/details/106026954
https://blog.csdn.net/weixin_36020178/article/details/120108163

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

文章標題:為什么if(-1)為真-創(chuàng)新互聯
文章URL:http://muchs.cn/article34/cdiepe.html

成都網站建設公司_創(chuàng)新互聯,為您提供靜態(tài)網站ChatGPT、企業(yè)建站、網站排名、微信公眾號商城網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都網頁設計公司