兩個數交換,你想到怎麼寫呢,應用層的人大概只聽說過利用另乙個變數進行暫存值,還有哪些方法呢?
作為底層學習人員我想你必須知道利用數的位操作,
*a ^= *b;
*b ^= *a;
*a ^= *b;
(貌似異或有個直接的什麼電路,幾部電路就達到了 目得)
(書上還寫了如果兩個相等 則它們兩個的值均為0 ,我百思不能其解,用筆算也是交換啊,怎麼會變成0,很疑惑)
這三步就是利用位操作進行的交換操作,當然也可以寫成這樣
[cpp]view plain
copy
class="cpp" name="code"> 我們這裡 int a =12,b = 55;int *p = ;
*p[1] ^= *p[0] ^= *p[1] ^= *p[0];(
在 gcc 下我們發現這樣並不可行(gcc下又是怎麼處理這中表示式的呢,(若p[0,1]不為指標這裡是可以按預想執行的)),但是裁分為下面的形式 我們發現可以按我們預想的執行,那麼在vc上呢?)
class="cpp" name="code"> 這時我們會發現 它並不是按照我們想的那樣, 這時的*p[1]將會為0 這時為什麼呢?首先對其裁分:
class="cpp" name="code">
class="cpp" name="code"> *p[1] ^= *p[0];*p[0] ^= *p[1];
*p[1] ^= *p[0];
class="cpp" name="code">裁分後 可以按預想執行,看來是gcc中對上面那種連起的表示式 的處理方式不一樣
匯流排錯誤 Bus error
在編制一和執行乙個程式的時候,人們可能會遇到下面的資訊 bus error core dumped 當出現這種資訊的時候,則表示在sparc等risc型別的cpu中發生了 違反定位訪問 的情況.例如,讀者可以閱讀下面的程式.include include void main 在這段程式中,能夠確保2...
使用mmap遇到匯流排錯誤bus error
先簡單描繪一下錯誤發生的場景 define mmap buff size 4096 struct message int fd open test o rdwr o creat lseek fd,mmap buff size,seek set message m null m message mma...
異或 異或相關
感謝 morning glory 贊助 異或異 或 de scri ptio ndes crip tion 給定 l,r l,r,求 i lr j lr i ji l r j l r i jl,r 1 09l,r 1 09 s olut ions olut ion 假設l 1,r 4l 1,r 4,...