為什麼這 4 個表示式得到了結果會不同?

時間 2021-05-30 19:29:26

1樓:rainyssss

相同的word size型別比較時型別轉換保持bit pattern不變將signed轉化為unsigned進行比較因此 -5 與 unsigned 2比較時將 -5(0xfffffffb)解釋為4294967291

不同的word size型別比較時型別轉換不能維持bit pattern一致因此需要填充或截斷 unsigned填充直接高位填充0 signed填充複製高位因此 -5 與 unsigned short 2比較時直接將unsigned short 2高位填充0轉變為int型別

2樓:SuperSodaSea

-5>(unsigned

short)2

=>(int)-

5>(int

)(unsigned

short)2

=>-5

>2=>0-

5>(unsigned)2

=>(unsigned)-

5>(unsigned)2

=>4294967291

>2=>1(

unsigned

short)-

5>(unsigned

short)2

=>65531

>2=>1(

unsigned)-

5>(unsigned)2

=>4294967291

>2=>1注意intunsigned short比較時是先將unsigned short轉為int,而非unsigned int,這些行為是確定的,和編譯器版本/優化等級無關。

用 d 正規表示式匹配 abcd 為什麼得到的是 abcd 而不是 d

Coincidence 的匹配過程 a匹配了乙個a,但是a後面是b不是d,不匹配,回溯,繼續匹配ab匹配了ab,但是ab後面不是d,不匹配,回溯,繼續abc 匹配了abc,後面是d,匹配結束。abcd 最終結果 我的分析這是簡要分析,貼張regexbuddy的匹配全過程圖 a 匹配過程 a a匹配a...

為什麼使用正規表示式會慢?

這題我知道,我來答一下。因為有的正則引擎使用NFA來做字串匹配,NFA有很多不同的路徑,當嘗試的某一路徑錯誤的時候就要回溯到前一狀態,嘗試其他路徑,所以時間複雜度較大。不知道是否有正則引擎用DFA來實現,DFA是最大匹配原則,只用跑一遍字串即可,時間複雜度與字串的長度相關,但是實現麻煩成本高。 已登...

C Lambda表示式怎麼寫都無效, 為什麼

說到底,還是活在 modern C 裡,太幸福了,沒經歷過 C 98 的仿函式的年代。lambda 本質上就是個過載了小括號運算子的匿名結構體的物件而已。所以捕獲列表為空時,相當於乙個空結構體,只有乙個入口位址資訊,型別轉換成函式指標當然沒問題。而有捕獲時,就 拖家帶口 了,這個 lambda 除了...