久久久国产精品视频袁燕,99re久久精品国产,亚洲欧美日韩国产综合v,天天躁夜夜躁狠狠久久,激情五月婷婷激情五月婷婷

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

問個單片機C語言的問題

在書上看到這么一條測試語句

while((a^0x080)!=0)

我看它的意思是測試一下a與0x080是否相等再執(zhí)行循環(huán)語句的,
為什么不用下面這個更直接的語句呢

while(a!=0x080)
全部回復(6)
正序查看
倒序查看
george_20
LV.3
2
2007-07-31 07:12
上面的是測試a的最高位是否置1,不是把a看作一個整體,是把a看作8個標志位的集合,下面的是將a看作一個整體.如果a=0x00,上式為假,下式為真.
0
回復
2007-07-31 09:52
@george_20
上面的是測試a的最高位是否置1,不是把a看作一個整體,是把a看作8個標志位的集合,下面的是將a看作一個整體.如果a=0x00,上式為假,下式為真.
有點明白,謝謝
0
回復
whatcall
LV.5
4
2007-08-01 21:11
@george_20
上面的是測試a的最高位是否置1,不是把a看作一個整體,是把a看作8個標志位的集合,下面的是將a看作一個整體.如果a=0x00,上式為假,下式為真.
2樓的不正確.
(^)是按位“異或”運算符,大家知道二進制異或運算時任意數(shù)(0或1)和1異或結(jié)果取反,和0異或則保持不變, a^0x080 的結(jié)果是將a的由低(起始位1)到高第8位取反,其他位不變.為什么要這樣做? 我猜想因為這一位標志的邏輯與其他7為可能是相反的.即假設其他7位是0表示正常,而第8位是為1時表示正常.因此
(a^0x080) != 0可一次判斷所有標志是否正常.

(a&0x080) != 0 才是屏蔽其他位測試第8位是否為零.
當然與(a!=0x080)更是截然不同.
說到底不過是數(shù)學運算和位邏輯運算的基礎(chǔ)知識,使用的多了就比較容易看出來.

不對之處,請指教.
0
回復
2007-08-28 17:20
@whatcall
2樓的不正確.(^)是按位“異或”運算符,大家知道二進制異或運算時任意數(shù)(0或1)和1異或結(jié)果取反,和0異或則保持不變,a^0x080的結(jié)果是將a的由低(起始位1)到高第8位取反,其他位不變.為什么要這樣做?我猜想因為這一位標志的邏輯與其他7為可能是相反的.即假設其他7位是0表示正常,而第8位是為1時表示正常.因此(a^0x080)!=0可一次判斷所有標志是否正常.(a&0x080)!=0才是屏蔽其他位測試第8位是否為零.當然與(a!=0x080)更是截然不同.說到底不過是數(shù)學運算和位邏輯運算的基礎(chǔ)知識,使用的多了就比較容易看出來.不對之處,請指教.
我比較贊同2樓的看法,因為進行異或運算時,兩操作數(shù)相同時結(jié)果為0,不同時結(jié)果為1,比如說1^1=0,0^0=0,1^0=1,0^1=1,和你說的“(a&0x080) != 0 才是屏蔽其他位測試第8位是否為零”功能差不多,但是這里它沒有起到屏蔽低7位的作用,而用與運算起到了屏蔽低7位的作用,如有不對之處請指正
0
回復
2007-08-28 17:23
@whatcall
2樓的不正確.(^)是按位“異或”運算符,大家知道二進制異或運算時任意數(shù)(0或1)和1異或結(jié)果取反,和0異或則保持不變,a^0x080的結(jié)果是將a的由低(起始位1)到高第8位取反,其他位不變.為什么要這樣做?我猜想因為這一位標志的邏輯與其他7為可能是相反的.即假設其他7位是0表示正常,而第8位是為1時表示正常.因此(a^0x080)!=0可一次判斷所有標志是否正常.(a&0x080)!=0才是屏蔽其他位測試第8位是否為零.當然與(a!=0x080)更是截然不同.說到底不過是數(shù)學運算和位邏輯運算的基礎(chǔ)知識,使用的多了就比較容易看出來.不對之處,請指教.
補充一點,應該是判斷a是不是等于80H,應該說還是樓主的理解比較好,其功能不是判斷最高位是否為1
0
回復
2007-08-31 11:58
樓主只拿這一條語句出來,容易誤導人.應該根據(jù)具體的實現(xiàn)功能來判斷.不要老拿著c語言的思想思考問題.4樓說的也有道理,不過誰知道他while循環(huán)里邊是什么呢??上邊可以用pic的匯編來寫:
btfss a_1,7
goto  while_loop1
goto  next_prog1
;-----------------

movlw 0x80
xorwf a,0
btfss 0x03,2
goto  while_loop
goto  next_prog
同樣一句c語言,理解不同,實現(xiàn)功能和效率明顯不同.你想讓編譯器怎么優(yōu)化呢?
0
回復
發(fā)