標題: 沒搞懂這兩句代碼結果為啥不一樣 [打印本頁]

作者: glinfei    時間: 2021-1-29 11:40
標題: 沒搞懂這兩句代碼結果為啥不一樣
Time_h=(i/16)*10+i%16;
Time_h=(i>>4)*10+i&0x0f;
前一句就可以,后一句十位不對,但把i&0x0f放前邊就行了,難到時編譯器的問題?
作者: munuc_w    時間: 2021-1-29 12:49
拋開物理意義,單看數(shù)值,這兩條語句功能等同。
作者: 名字不是重點    時間: 2021-1-29 13:21
從左到右:i>>4之后,i的值變了。到了i&0x0f,這時的i已不 原來的i,
而前一句i至始至終沒改過
作者: glinfei    時間: 2021-1-29 13:22
本來習慣用第一種寫法,昨天腦抽寫了第二種的,顯示的就總出錯,剛剛突然琢磨出來,Keil居然是先加后與。
作者: 名字不是重點    時間: 2021-1-29 13:27
glinfei 發(fā)表于 2021-1-29 13:22
本來習慣用第一種寫法,昨天腦抽寫了第二種的,顯示的就總出錯,剛剛突然琢磨出來,Keil居然是先加后與。

Time_h=(i>>4)*10+(i&0x0f);試試
作者: sync763    時間: 2021-1-29 13:46
C語言中+ - 的運算優(yōu)先級要高于&(位與),&(取地址)運算要高于+ - 運算。
作者: wulin    時間: 2021-1-29 14:00
優(yōu)先級和結合性
C語言中,運算符的運算優(yōu)先級共分為15級。1級最高,15級最低。在表達式中,優(yōu)先級較高的先于優(yōu)先級較低的進行運算。 而在一個運算量兩側的運算符優(yōu)先級相同時, 則按運算符的結合性所規(guī)定的結合方向處理。 C語言中各運算符的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算符的結合性是自左至右,即先左后右。如有表達式x-y+z則y應先與“-”號結合, 執(zhí)行x-y運算,然后再執(zhí)行+z的運算。這種自左至右的結合方向就稱為“左結合性”。而自右至左的結合方向稱為“右結合性”。 最典型的右結合性運算符是賦值運算符。如x=y=z,由于“=”的右結合性,應先執(zhí)行y=z再執(zhí)行x=(y=z)運算。 C語言運算符中有不少為右結合性,應注意區(qū)別,以避免理解錯誤。

作者: glinfei    時間: 2021-1-29 15:00
名字不是重點 發(fā)表于 2021-1-29 13:27
Time_h=(i>>4)*10+(i&0x0f);試試

試過了,就是忘記優(yōu)先順序了,還以為發(fā)現(xiàn)編譯器的bug呢
作者: 心有浮生    時間: 2021-1-29 16:23
我從來不記優(yōu)先級,都是用括號
作者: fj51hei    時間: 2021-1-29 19:58
名字不是重點 發(fā)表于 2021-1-29 13:21
從左到右:i>>4之后,i的值變了。到了i&0x0f,這時的i已不 原來的i,
而前一句i至始至終沒改過

對的,是這樣!
作者: jizhongbiao    時間: 2023-2-22 11:23
運算符結合的問題,基礎不扎實。去看看C語言基礎教程。
作者: wufa1986    時間: 2023-2-22 11:44
寫程序要多加括號,不要想當然




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1