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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2287|回復(fù): 14
打印 上一主題 下一主題
收起左側(cè)

求助C語(yǔ)言問(wèn)題 想得到dat的最高位

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1000365 發(fā)表于 2022-1-11 00:19 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 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;
這三個(gè)代碼是不是一個(gè)意思啊?
就是想得到dat最高位。
什么情況下用哪個(gè)啊?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:65956 發(fā)表于 2022-1-11 08:34 | 只看該作者
P2^0=dat&0x80;這個(gè)語(yǔ)句結(jié)果是P2.0永遠(yuǎn)是0
if((dat&0x80)>0)
P2^0=1;
else if
P2^0=0;
這個(gè)語(yǔ)句就說(shuō)明當(dāng)條件滿足時(shí)P2.0是1,否則是0
P2^0=dat>>7;這個(gè)語(yǔ)句是P2.0有可能是1也有可能是0
所以上面那三個(gè)語(yǔ)句是不同的,結(jié)果也是不同的
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

地板
ID:407019 發(fā)表于 2022-1-11 10:22 | 只看該作者
不對(duì)    P2^0=dat&0x80;   你dat是一個(gè)字節(jié)   計(jì)算出來(lái)的是一個(gè)字節(jié)   你把一個(gè)字節(jié)賦值給一個(gè)bit這是不對(duì)的
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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


    13:         if(dat & 0x80 > 0) {
    14:             P20 = 1;
    15:         } else {
    16:             P20 = 0;
    17:         }
C:0x008F    E508     MOV      A,dat(0x08)                //<<<<<<<<<<<12時(shí)鐘
C:0x0091    30E004   JNB      0xE0.0,C:0098                //<<<<<<<<<<<24時(shí)鐘
C:0x0094    D2A0     SETB     P20(0xA0.0)                //<<<<<<<<<<<12時(shí)鐘
C:0x0096    8002     SJMP     C:009A                        //<<<<<<<<<<<12時(shí)鐘
C:0x0098    C2A0     CLR      P20(0xA0.0)                //<<<<<<<<<<<24時(shí)鐘
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時(shí)鐘
第二種如果高位是零走36+24時(shí)鐘,高位是一走36+12+12時(shí)鐘
第三種太多行

結(jié)論是第一種代碼簡(jiǎn)潔,效率也最高

推薦第一種
回復(fù)

使用道具 舉報(bào)

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

說(shuō)的對(duì),三個(gè)意思一樣,但第三個(gè)效率最低,我想問(wèn)的是為啥第二個(gè)效率高,我覺(jué)得第一個(gè)和第二個(gè)效率一樣啊?
回復(fù)

使用道具 舉報(bào)

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

dat <<= 1;
P20 = CY;
回復(fù)

使用道具 舉報(bào)

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

P2^0=dat&0x80;這個(gè)語(yǔ)句結(jié)果是P2.0永遠(yuǎn)是0。如果dat最高位是1,那么P2^0就是1。實(shí)際上,P2^0就是dat的最高位。后面兩個(gè)也是dat的最高位。
回復(fù)

使用道具 舉報(bào)

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

謝謝 大佬
回復(fù)

使用道具 舉報(bào)

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

得到dat的最高位,對(duì)keil這種高度優(yōu)化的編譯器來(lái)說(shuō),確實(shí)是1最高。我用過(guò)一些國(guó)產(chǎn)臺(tái)產(chǎn)的芯片的C編譯器,它們編譯優(yōu)化做得不夠,方法2效率最高,方法1、3的執(zhí)行步數(shù)是2的5倍以上。

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

使用道具 舉報(bào)

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

dat

CY = 0;
dat <<= 1;
P20 = CY;
CY應(yīng)該先置0

評(píng)分

參與人數(shù) 1黑幣 +15 收起 理由
天ノ憶 + 15 贊一個(gè)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

14#
ID:1007385 發(fā)表于 2022-2-28 23:15 | 只看該作者
嚴(yán)禁用第二種,位操作
回復(fù)

使用道具 舉報(bào)

15#
ID:624769 發(fā)表于 2022-3-1 17:33 來(lái)自手機(jī) | 只看該作者
lyonkon 發(fā)表于 2022-2-28 22:40
CY = 0;
dat

不需要,<<= 包含了 clr c,
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕色站 | 中文字幕一区二区在线观看 | aa级毛片毛片免费观看久 | 视频一区二区三区四区五区 | www.亚洲一区二区 | 日韩视频福利 | 亚洲综合中文字幕在线观看 | 午夜视频免费在线观看 | 精品欧美一区免费观看α√ | 国产一区二区视频免费在线观看 | 欧美午夜一区 | 国产精品福利网 | 国产区第一页 | av黄色免费在线观看 | 99re视频 | 亚洲欧美日韩在线不卡 | 国产小视频在线 | 中文字幕一区二区三区四区五区 | 午夜精品久久久久久久99黑人 | 亚洲综合视频 | 亚洲综合三区 | 一级毛片免费看 | 久久久久一区二区三区 | 日韩在线小视频 | 亚洲精品黄色 | 男人电影天堂 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 久久精品91久久久久久再现 | 天堂在线1 | 综合久久久 | 国产中文字幕在线 | 欧美久久一级 | 天天综合干 | 国产成人福利在线观看 | 国产精品一区二区三区在线 | 密色视频 | av午夜电影 | 国产成人精品网站 | 久久久噜噜噜www成人网 | www在线视频 | 99色综合|