欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教個低級問題(一個二進制數用什么運算能讓高位和低位反過來)

  [復制鏈接]
跳轉到指定樓層
樓主
一個二進制數 用什么運算能讓高位和低位反過來

比如
原來的數是 0000 0001 目標是1000 0000
原來的數是 0000 1001 目標是1001 0000
原來的數是 0000 0111 目標是1110 0000
原來的數是 0110 0001 目標是1000 0110

以此類推..............................

不是移位 是讓原來的最低位成最高位
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:164602 發表于 2018-11-6 07:28 | 只看該作者
還是移位嘛,只不過要移八次。還可以位操作,這個復雜點——逐個位取出值來,再賦值回相應的位。

評分

參與人數 1黑幣 +4 收起 理由
dzbj + 4 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:318264 發表于 2018-11-6 08:42 | 只看該作者
高位右移,低位左移

評分

參與人數 1黑幣 +4 收起 理由
dzbj + 4 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:111634 發表于 2018-11-6 08:46 | 只看該作者
邏輯運算。例如匯編語言。1. 循環左移一次: RL  A; 2. 高低四位交換:SWAP  A; 3. 循環右移四次:RR   A; 4. 要用幾條指令才能實現。

評分

參與人數 1黑幣 +4 收起 理由
dzbj + 4 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:94031 發表于 2018-11-6 10:11 | 只看該作者
給個例程:
#include "reg51.h"

char duidiao(char a)
{
  char b=0;

  if((a&0x01)!=0){b=b|0x80;}
        if((a&0x02)!=0){b=b|0x40;}
        if((a&0x04)!=0){b=b|0x20;}
        if((a&0x08)!=0){b=b|0x10;}
       
        if((a&0x10)!=0){b=b|0x08;}
        if((a&0x20)!=0){b=b|0x04;}
        if((a&0x40)!=0){b=b|0x02;}
        if((a&0x80)!=0){b=b|0x01;}
       
        return b;
}
main()
{
       
        while(1)
        {       
                char b;
               
                b=duidiao(0x61);
       
        }
}

評分

參與人數 1黑幣 +4 收起 理由
dzbj + 4 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:47286 發表于 2018-11-6 10:14 | 只看該作者
在此一并感謝沙發 板凳 地板的回復

請教一下 除了每位都位移一次外 有更簡潔的算法嗎
回復

使用道具 舉報

7#
ID:421547 發表于 2018-11-6 10:20 | 只看該作者
目標是1000 0000
回復

使用道具 舉報

8#
ID:300089 發表于 2018-11-6 10:25 | 只看該作者
直接與運算,與完保存高位數據和地位數據~再互換

評分

參與人數 1黑幣 +4 收起 理由
dzbj + 4 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

9#
ID:149144 發表于 2018-11-6 10:28 | 只看該作者
簡單粗暴
#include <reg52.h>
unsigned int temp = 0x61;  //  0110 0001  -> 1000 0110    0x86
unsigned int temp0,temp1,temp2,temp3,temp4,temp5,temp6,temp7;
void main()
{       
        temp7 =   (temp & 0x01) << 7 ;
        temp6 =                (temp & 0x02) << 5 ;  
        temp5 =                (temp & 0x04) << 3 ;  
        temp4 =                (temp & 0x08) << 1 ;  
        temp3 =                (temp & 0x10) >> 1 ;  
        temp2 =                (temp & 0x20) >> 3 ;
        temp1 =   (temp & 0x40) >> 5 ;
        temp0 =   (temp & 0x80) >> 7    ;


        temp = (temp0 | temp1 | temp2 | temp3 | temp4 | temp5 | temp6 | temp7);


        while(1)
        {
                P1 = temp  ;
        }
       
}






20181106102702.jpg (72.86 KB, 下載次數: 68)

20181106102702.jpg

評分

參與人數 1黑幣 +6 收起 理由
dzbj + 6 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

10#
ID:421562 發表于 2018-11-6 10:38 | 只看該作者
你是用C語言嗎,還是用位操作吧,寫一個函數。
回復

使用道具 舉報

11#
ID:89515 發表于 2018-11-6 10:47 | 只看該作者
N|=(X&0x01<<i)<<(7-i);。N為目標數,X為原數,i=(0-7).

評分

參與人數 1黑幣 +7 收起 理由
dzbj + 7 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

12#
ID:47286 發表于 2018-11-6 11:22 | 只看該作者
xuyaqi 發表于 2018-11-6 10:11
給個例程:
#include "reg51.h"

感謝回復

我覺得您的方法消耗的時間會比偏多
回復

使用道具 舉報

13#
ID:47286 發表于 2018-11-6 11:24 | 只看該作者
cuihaodianzi 發表于 2018-11-6 10:28
簡單粗暴
#include
unsigned int temp = 0x61;  //  0110 0001  -> 1000 0110    0x86

謝謝

你用的是多少頻率 12M么 這樣做一次 消耗多少時間
回復

使用道具 舉報

14#
ID:47286 發表于 2018-11-6 11:25 | 只看該作者

不明覺厲 我好好想想

請教 這樣做 同樣時鐘頻率下 比前面的方法耗時少么 我用c
回復

使用道具 舉報

15#
ID:149144 發表于 2018-11-6 11:52 | 只看該作者

按照這個操作,貌似所有的“位” 都在最高位了,除了 0000 0000,的結果是 0,
其他的結果應該都是 1000 0000 吧 ?
回復

使用道具 舉報

16#
ID:149144 發表于 2018-11-6 12:07 | 只看該作者
受到 11# 啟發,改了一個

#include <reg52.h>
unsigned int N;
unsigned char i,X = 0xa1;
void main (void)
{
        for(i = 0;i < 8;i++)
        {
                N|=( X & (0x01 << i) ) << (15 - (2 * i) );//N為目標數,X為原數,i=(0-7).       
        }
       
        N >>= 8;


  while(1)
  {
    P1 =N;
  }  
}

評分

參與人數 1黑幣 +4 收起 理由
dzbj + 4 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

17#
ID:266660 發表于 2018-11-6 12:39 | 只看該作者
高右低左
回復

使用道具 舉報

18#
ID:89515 發表于 2018-11-6 12:56 | 只看該作者
dzbj 發表于 2018-11-6 11:25
不明覺厲 我好好想想

請教 這樣做 同樣時鐘頻率下 比前面的方法耗時少么 我用c

你要做什么,時間要求很高嗎?8位數據的加減移位是很快的了,不然就只有用匯編了
回復

使用道具 舉報

19#
ID:89515 發表于 2018-11-6 12:58 | 只看該作者
cuihaodianzi 發表于 2018-11-6 11:52
按照這個操作,貌似所有的“位” 都在最高位了,除了 0000 0000,的結果是 0,
其他的結果應該都是 1000 ...

7-i   ???????????????
回復

使用道具 舉報

20#
ID:421655 發表于 2018-11-6 13:13 來自觸屏版 | 只看該作者
邏輯運算。例如匯編語言。1. 循環左移一次: RL  A; 2. 高低四位交換:SWAP  A; 3. 循環右移四次:RR   A; 4. 要用幾條指令才能實現。

評分

參與人數 1黑幣 +4 收起 理由
dzbj + 4 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

21#
ID:387733 發表于 2018-11-6 13:33 | 只看該作者
我給你換個思路看看,不循環,一條語句:
char code c[]=
{
        0x0,0x8,0x4,0xc,0x2,0xa,0x6,0xe,
        0x1,0x9,0x5,0xd,0x3,0xb,0x7,0xf,
};


void main(void)
{
   char a;
   a=0x01;

   a=c[a%0x0f]<<4+c[a>>4];

   while(1);
}

評分

參與人數 1黑幣 +7 收起 理由
dzbj + 7 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

22#
ID:421684 發表于 2018-11-6 14:02 | 只看該作者
除以16,用商+16*余數
回復

使用道具 舉報

23#
ID:421696 發表于 2018-11-6 14:14 來自觸屏版 | 只看該作者
高位右移,低位左移
回復

使用道具 舉報

24#
ID:149144 發表于 2018-11-6 15:52 | 只看該作者
mengzhixinheng 發表于 2018-11-6 12:58
7-i   ???????????????

xxxx xxxx =(X&0x01<<i)<<(7-i);
只要 xxxx xxxx != 0;
i = 0 ,7 - i = 7 : 0000 0001 << 7    ->  1000 0000
i = 1 ,7 - i = 6 : 0000 0010 << 6    ->  1000 0000
i = 2 ,7 - i = 5 : 0000 0100 << 5    ->  1000 0000
i = 3 ,7 - i = 4 : 0000 1000 << 4    ->  1000 0000
i = 4 ,7 - i = 3 : 0001 0000 << 3    ->  1000 0000
i = 5 ,7 - i = 2 : 0010 0000 << 2    ->  1000 0000
i = 6 ,7 - i = 1 : 0100 0000 << 1    ->  1000 0000
i = 7 ,7 - i = 0 : 1000 0000            ->  1000 0000
都是 0x80 啊
(X&0x01<<i)<<(7-i)   先左移 i ,再左移 7 - i ,不就是 左移 7位 嗎 ?

評分

參與人數 1黑幣 +4 收起 理由
dzbj + 4 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

25#
ID:149144 發表于 2018-11-6 16:07 | 只看該作者
dzbj 發表于 2018-11-6 11:24
謝謝

你用的是多少頻率 12M么 這樣做一次 消耗多少時間

直接用移位時:  0.000496 - 0.000437 = 0.000059 S for 循環操作:  0.001383 - 0.000437 = 0.000946 S
應該是 for 循環語句自身浪費了太多時間





20181106155802.jpg (108.54 KB, 下載次數: 61)

20181106155802.jpg

20181106155842.jpg (80.68 KB, 下載次數: 76)

20181106155842.jpg

20181106160020.jpg (97.87 KB, 下載次數: 61)

20181106160020.jpg

20181106160047.jpg (96.13 KB, 下載次數: 78)

20181106160047.jpg

評分

參與人數 1黑幣 +7 收起 理由
dzbj + 7 感謝你的認真 贊

查看全部評分

回復

使用道具 舉報

26#
ID:89515 發表于 2018-11-6 17:37 | 只看該作者

確實,謝謝!!!
N|=(X<<i&0x80)>>(7-i);。N為目標數,X為原數,i=(0-7).
回復

使用道具 舉報

27#
ID:89515 發表于 2018-11-6 17:37 | 只看該作者

N|=(X<<i&0x80)>>(7-i);。N為目標數,X為原數,i=(0-7).
回復

使用道具 舉報

28#
ID:89515 發表于 2018-11-6 18:29 | 只看該作者
2
3
N=(N<<4)|(N>>4);
N=((N<<2)&0xcc)|((N>>2)&0x33);  
N=((N<<1)&0xaa)|((N>>1)&0x55);
也可以對調法,不用循環,但是不知道是否節約時間

回復

使用道具 舉報

29#
ID:47286 發表于 2018-11-6 20:03 | 只看該作者
mengzhixinheng 發表于 2018-11-6 12:56
你要做什么,時間要求很高嗎?8位數據的加減移位是很快的了,不然就只有用匯編了

倒不是時間的問題 我也能用移位的方法實現 只是方法比較笨 正常思維 想請教前輩們有什么更好的方法 這么簡單的位操作就不應該消耗很多時間 簡單的程序當然沒問題 復雜程序就不好了
回復

使用道具 舉報

30#
ID:47286 發表于 2018-11-6 20:06 | 只看該作者
51heidianzixy 發表于 2018-11-6 14:02
除以16,用商+16*余數

感謝你的回復

做乘除運算比移位和加減耗時多
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表