久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2395|回復: 14
打印 上一主題 下一主題
收起左側

求助C語言問題 想得到dat的最高位

  [復制鏈接]
跳轉到指定樓層
樓主
ID:1000365 發表于 2022-1-11 00:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 ty86391101 于 2022-1-11 05:20 編輯

P2^0=dat&0x80;

if((dat&0x80)>0)
P2^0=1;
else if
P2^0=0;

P2^0=dat>>7;
這三個代碼是不是一個意思啊?
就是想得到dat最高位。
什么情況下用哪個啊?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:65956 發表于 2022-1-11 08:34 | 只看該作者
P2^0=dat&0x80;這個語句結果是P2.0永遠是0
if((dat&0x80)>0)
P2^0=1;
else if
P2^0=0;
這個語句就說明當條件滿足時P2.0是1,否則是0
P2^0=dat>>7;這個語句是P2.0有可能是1也有可能是0
所以上面那三個語句是不同的,結果也是不同的
回復

使用道具 舉報

板凳
ID:404893 發表于 2022-1-11 09:02 | 只看該作者
三個基本上是一個意思。但是要判斷dat的最高位并賦值給P2^0, 應當用第2種。
回復

使用道具 舉報

地板
ID:407019 發表于 2022-1-11 10:22 | 只看該作者
不對    P2^0=dat&0x80;   你dat是一個字節   計算出來的是一個字節   你把一個字節賦值給一個bit這是不對的
回復

使用道具 舉報

5#
ID:887371 發表于 2022-1-11 10:57 | 只看該作者
符號^只有和sbit搭配后才是才是取端口某位的意思,這是51特有的語法。其它時候都是異或符。
所以你這3個都是錯的。
應該把所有P2^0替換為P20,然后在前面加上一句 sbit P20=P2^0;
三個基本上是一個意思。
第3個效率最低。
第2個效率最高。但應改為
  1. sbit P20=P2^0;
  2. if(dat&0x80)
  3. P20=1;
  4. else
  5. P20=0;
復制代碼
回復

使用道具 舉報

6#
ID:893997 發表于 2022-1-11 11:15 | 只看該作者
不同的,第二可能會改變
回復

使用道具 舉報

7#
ID:161164 發表于 2022-1-11 14:51 | 只看該作者
先不說P2^0這種明顯的錯誤三種代碼都可以得到最高位
把以上三種代碼放進Keil 然后編譯
得出以下結果:
    13:                         P20 = dat & 0x80;
C:0x008F    E508     MOV      A,dat(0x08)                //<<<<<<<<<<<12時鐘
C:0x0091    33       RLC      A                                        //<<<<<<<<<<<12時鐘
C:0x0092    92A0     MOV      P20(0xA0.0),C                //<<<<<<<<<<<24時鐘


    13:         if(dat & 0x80 > 0) {
    14:             P20 = 1;
    15:         } else {
    16:             P20 = 0;
    17:         }
C:0x008F    E508     MOV      A,dat(0x08)                //<<<<<<<<<<<12時鐘
C:0x0091    30E004   JNB      0xE0.0,C:0098                //<<<<<<<<<<<24時鐘
C:0x0094    D2A0     SETB     P20(0xA0.0)                //<<<<<<<<<<<12時鐘
C:0x0096    8002     SJMP     C:009A                        //<<<<<<<<<<<12時鐘
C:0x0098    C2A0     CLR      P20(0xA0.0)                //<<<<<<<<<<<24時鐘
C:0x009A    E508     

    13:                         P20 = dat >> 7;
C:0x008F    E508     MOV      A,dat(0x08)
C:0x0091    C4       SWAP     A
C:0x0092    13       RRC      A
C:0x0093    13       RRC      A
C:0x0094    13       RRC      A
C:0x0095    5401     ANL      A,#0x01
C:0x0097    24FF     ADD      A,#0xFF
C:0x0099    92A0     MOV      P20(0xA0.0),C




看的出第一種要走48時鐘
第二種如果高位是零走36+24時鐘,高位是一走36+12+12時鐘
第三種太多行

結論是第一種代碼簡潔,效率也最高

推薦第一種
回復

使用道具 舉報

8#
ID:844772 發表于 2022-1-11 16:35 | 只看該作者
datouyuan 發表于 2022-1-11 10:57
符號^只有和sbit搭配后才是才是取端口某位的意思,這是51特有的語法。其它時候都是異或符。
所以你這3個都 ...

說的對,三個意思一樣,但第三個效率最低,我想問的是為啥第二個效率高,我覺得第一個和第二個效率一樣啊?
回復

使用道具 舉報

9#
ID:624769 發表于 2022-1-11 17:33 | 只看該作者
真正效率最高的得到最高位的做法是:

dat <<= 1;
P20 = CY;
回復

使用道具 舉報

10#
ID:8222 發表于 2022-1-11 20:44 | 只看該作者
aking991 發表于 2022-1-11 08:34
P2^0=dat&0x80;這個語句結果是P2.0永遠是0
if((dat&0x80)>0)
P2^0=1;

P2^0=dat&0x80;這個語句結果是P2.0永遠是0。如果dat最高位是1,那么P2^0就是1。實際上,P2^0就是dat的最高位。后面兩個也是dat的最高位。
回復

使用道具 舉報

11#
ID:1000365 發表于 2022-1-11 23:38 | 只看該作者
lkc8210 發表于 2022-1-11 14:51
先不說P2^0這種明顯的錯誤三種代碼都可以得到最高位
把以上三種代碼放進Keil 然后編譯
得出以下結果:

謝謝 大佬
回復

使用道具 舉報

12#
ID:887371 發表于 2022-1-12 09:43 | 只看該作者
lkc8210 發表于 2022-1-11 14:51
先不說P2^0這種明顯的錯誤三種代碼都可以得到最高位
把以上三種代碼放進Keil 然后編譯
得出以下結果:

得到dat的最高位,對keil這種高度優化的編譯器來說,確實是1最高。我用過一些國產臺產的芯片的C編譯器,它們編譯優化做得不夠,方法2效率最高,方法1、3的執行步數是2的5倍以上。

另外,就是用keil中,得到dat的最高位和dat的其它位的匯編代碼,方法1、3差別很大,方法2幾乎一致。
回復

使用道具 舉報

13#
ID:73992 發表于 2022-2-28 22:40 | 只看該作者
188610329 發表于 2022-1-11 17:33
真正效率最高的得到最高位的做法是:

dat

CY = 0;
dat <<= 1;
P20 = CY;
CY應該先置0

評分

參與人數 1黑幣 +15 收起 理由
天ノ憶 + 15 贊一個!

查看全部評分

回復

使用道具 舉報

14#
ID:1007385 發表于 2022-2-28 23:15 | 只看該作者
嚴禁用第二種,位操作
回復

使用道具 舉報

15#
ID:624769 發表于 2022-3-1 17:33 來自觸屏版 | 只看該作者
lyonkon 發表于 2022-2-28 22:40
CY = 0;
dat

不需要,<<= 包含了 clr c,
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 懂色av色香蕉一区二区蜜桃 | 中文字幕一区二区三区在线乱码 | 欧美精品99 | 久久久久久久久久久福利观看 | 国产精品一区二区在线播放 | 亚洲伊人精品酒店 | 午夜伦4480yy私人影院 | 成人一区二区电影 | 成人亚洲在线 | 久久国产传媒 | 欧美日韩国产一区二区三区 | 欧洲性生活视频 | 亚洲视频在线看 | 天天拍夜夜爽 | 91视频大全 | 精品日韩欧美一区二区 | 一区二区三区高清 | 亚洲精品日韩欧美 | 国产大片黄色 | 欧美成人一区二免费视频软件 | 日日夜夜精品视频 | 亚洲精品资源 | 欧美a√ | 国产色| 国产成人av在线播放 | 在线视频国产一区 | 国产精品久久av | 亚洲精品一区久久久久久 | 午夜精品在线观看 | 九九精品视频在线 | 午夜爽爽爽男女免费观看影院 | 欧美日韩网站 | 国产精品无码专区在线观看 | 精品国产欧美日韩不卡在线观看 | 91精品一区| 婷婷色在线播放 | 免费午夜视频 | 国产日韩精品视频 | 99国产精品久久久 | 激情在线视频 | 久久久久国产一区二区 |