首先,來一段這樣的程式:
按照c語言學過的後置加加,前置減減的知識來說大多數人的思路是這樣:
後置加加,先進行取值,然後自加1。所以i++列印的值為0。 後 i 值目前為1。
前置減減,先自減後取值,所以- -i列印出來的值
為0。後 i 值為0;
後置減減,先取值後自減,所以i++列印出來的值為0。後i 值為1。
但是實際的結果值為:
意不意外,驚不驚喜?在看到答案之餘,是不是懷疑自己學錯了?其實思考的是對的,只是編譯器(我的是vs2013版的)給你開了乙個玩笑。當時我也愣了,還以為自己的壞了,哈哈。後來進入到彙編指令之後,就明白了。接下來,一起進入反彙編指令之旅。
push是出棧指令,首先找到它出戰的元素,找到它的出處。然後開始解讀反彙編指令了。
順序是黑藍紅,三色的最終指向就是最後的列印結果。至於i- -列印出1 的原因就是說,因為列印的是i的值,在整個過程中i通過暫存器進行了兩次++,一次- -。所以最終的列印結果是1。旅程結束了,這就告訴我們,多敲敲**,哈哈。
最大連續1的個數 III
給定乙個由若干0和1組成的陣列a,我們最多可以將k個值從 0 變成 1 返回僅包含 1 的最長 連續 子陣列的長度。重點 題意轉換。把 最多可以把 k 個 0 變成 1,求僅包含 1 的最長子陣列的長度 轉換為 找出乙個最長的子陣列,該子陣列內最多允許有 k 個 0 經過上面的題意轉換,我們可知本題...
連續出現的數字
表 logs 編寫乙個 sql 查詢,查詢所有至少連續出現三次的數字。返回的結果表中的資料可以按任意順序排列。查詢結果格式如下面的例子所示 解法一 使用視窗函式的偏差函式完美實現。可以這樣理解 將num複製兩列num1和num2,然後num1整體向上移動一行,num2整體向上移動兩行,如下 所以只要...
連續出現的數字
編寫乙個 sql 查詢,查詢所有至少連續出現三次的數字。id num 1 1 2 1 3 1 4 2 5 1 6 2 7 2 例如,給定上面的 logs 表,1 是唯一連續出現至少三次的數字。consecutivenums 1 write your mysql query statement bel...