找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

邏輯太差了搞不懂C語言數(shù)值增加與移動(dòng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:90619 發(fā)表于 2020-4-25 19:21 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
rekey定義為無符號字符型,首先是將最低位左移歸零,但是后面的rekey不是數(shù)字 1  2  3 4... 累計(jì)增加變化的嗎 ,那在左移是啥操作,比如當(dāng)前rekey是5二進(jìn)制是0101,執(zhí)行左移是不是就是1010了,然后在加1,就是6二進(jìn)制就是0110,執(zhí)行左移就是1100了?那是不是rekey就是當(dāng)前加到的值得二進(jìn)制移動(dòng)的最終數(shù)?大神幫解析一下呢  感謝
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

14#
ID:90619 發(fā)表于 2020-4-27 08:31 | 只看該作者
f556 發(fā)表于 2020-4-26 21:05
I服了you。
++是++,不要扯到移位。

回復(fù)

使用道具 舉報(bào)

13#
ID:282850 發(fā)表于 2020-4-26 21:05 | 只看該作者
xiaohu520 發(fā)表于 2020-4-26 16:11
定義的unsignedchar rekey,rekey++,不就是1(0001) 2(0010) 3(0011) 4(0100)..這樣的累加的嗎? ...

I服了you。
++是++,不要扯到移位。
<<位左移,是另一個(gè)語句,程序是一步一步執(zhí)行的,自己的思路也要一步步來,不能混為一談。移位就象一列火車,你在原地只能看到8節(jié)有貨無貨車箱xxxx【1011 0001】,左移動(dòng)1節(jié)后車箱后你看到【0110001?】,?處補(bǔ)0 。
想問一下你是女、還是男?
回復(fù)

使用道具 舉報(bào)

12#
ID:727081 發(fā)表于 2020-4-26 21:00 | 只看該作者
xiaohu520 發(fā)表于 2020-4-26 13:23
第一次循環(huán) 0101左移1010加一1011(DIO是高電平1),這個(gè)加1不是5+1的嗎?為啥是位上加1的?

rekey已徑左移一位了,為什么還是5呢,要按你這樣算也應(yīng)該是10+1吧
回復(fù)

使用道具 舉報(bào)

11#
ID:213173 發(fā)表于 2020-4-26 18:39 | 只看該作者
如果當(dāng)前rekey是5,二進(jìn)制是0000 0101,執(zhí)行左移一位就是0000 1010,然后再加1,就是0000 1011。
回復(fù)

使用道具 舉報(bào)

10#
ID:90619 發(fā)表于 2020-4-26 16:47 | 只看該作者
f556 發(fā)表于 2020-4-26 10:14
位是二進(jìn)制的位,不要扯上十進(jìn)制。

寫了一個(gè)rekey程序調(diào)試,這個(gè)和那個(gè)rekey變化意義是一樣的嗎 ?調(diào)試下來就是數(shù)值得累加,沒有每個(gè)位在移動(dòng)呢
回復(fù)

使用道具 舉報(bào)

9#
ID:90619 發(fā)表于 2020-4-26 16:11 | 只看該作者
f556 發(fā)表于 2020-4-26 10:14
位是二進(jìn)制的位,不要扯上十進(jìn)制。

定義的unsignedchar rekey,rekey++,不就是1(0001) 2(0010) 3(0011) 4(0100)..這樣的累加的嗎?執(zhí)行到了rekey++這個(gè)指令的時(shí)候是不是就是rekey為某一個(gè)數(shù)值(unsigned char型的數(shù)值),然后下一個(gè)指令rekey<<1,是不是對當(dāng)前rekey加的值,進(jìn)行左移的?   想不明白rekey的移位只是一位一位的增加一.比如5+1之后的移位,和0101的移位    。是不是太笨了不適合學(xué)了 ,也知道移位是二進(jìn)制的位在移位,就是想不通,rekey++這一步是怎么和位進(jìn)行聯(lián)系的,rekey++不就是數(shù)值得累加嗎   謝謝指點(diǎn)迷津
回復(fù)

使用道具 舉報(bào)

8#
ID:90619 發(fā)表于 2020-4-26 13:23 | 只看該作者
chomou 發(fā)表于 2020-4-26 08:30
比如rekay是5,第一次循環(huán) 0101左移1010加一1011(DIO是高電平1)
                           第二次循環(huán) ...

第一次循環(huán) 0101左移1010加一1011(DIO是高電平1),這個(gè)加1不是5+1的嗎?為啥是位上加1的?
回復(fù)

使用道具 舉報(bào)

7#
ID:282850 發(fā)表于 2020-4-26 10:14 | 只看該作者
xiaohu520 發(fā)表于 2020-4-26 08:10
unsingede char  rekey不是 1(0001) 2(0010) 3(0110) 4(0100) 。。。 這樣方式的增加的? 那左移 ...

位是二進(jìn)制的位,不要扯上十進(jìn)制。<< | & ....都是二進(jìn)制。除了++可以用十進(jìn)制(也可不用十進(jìn))。一定要放棄十進(jìn)制,用二進(jìn)制或16進(jìn)制。
多年前的高手說編程用十六進(jìn)制方便,后來自己理解了為什么用HEX。
回復(fù)

使用道具 舉報(bào)

6#
ID:727081 發(fā)表于 2020-4-26 08:30 | 只看該作者
比如rekay是5,第一次循環(huán) 0101左移1010加一1011(DIO是高電平1)
                           第二次循環(huán) 1011左移0110保持0110(DIO是低電平0)
                           第三次循環(huán) 0110左移1100加一1101
回復(fù)

使用道具 舉報(bào)

5#
ID:90619 發(fā)表于 2020-4-26 08:10 | 只看該作者
hantu 發(fā)表于 2020-4-26 01:22
左移一位,就把最高位的給丟掉了,低位是補(bǔ)進(jìn)0來的,然后它DIO是高電平的話就加1(也就是從低位把一個(gè)bit的 ...

unsingede char  rekey不是 1(0001) 2(0010) 3(0110) 4(0100) 。。。 這樣方式的增加的? 那左移是不是就是對  1(0001) 2(0010) 3(0110) 4(0100) 。。。這些數(shù)左移的,比如當(dāng)前rekey加到了5(0101),下一個(gè)指令是對5左移,就是0101——變成1010了,我是搞不懂 rekey++不就是數(shù)字的累加嗎,而rekey左移不就是對當(dāng)前的數(shù)字二進(jìn)制進(jìn)行位移嗎?這樣就對不上最終結(jié)果了。  這一塊老打不通
回復(fù)

使用道具 舉報(bào)

地板
ID:90619 發(fā)表于 2020-4-26 08:03 | 只看該作者
csmyldl 發(fā)表于 2020-4-25 21:25
這段程序是把讀到的鍵盤狀態(tài)存入rekey中,左移1位是為了騰出最右邊的1位空間,加1是當(dāng)狀態(tài)為高電平時(shí),把1 ...

unsingede char  rekey不是 1 2 3 4 。。。 這樣方式的增加的? 那左移是不是就是對  1 2 3 4 。。。這些數(shù)左移的
回復(fù)

使用道具 舉報(bào)

板凳
ID:462827 發(fā)表于 2020-4-26 01:22 | 只看該作者
左移一位,就把最高位的給丟掉了,低位是補(bǔ)進(jìn)0來的,然后它DIO是高電平的話就加1(也就是從低位把一個(gè)bit的數(shù)據(jù)讀進(jìn)來,如果是低電平就什么不加就行了)
不管原來的rekey是什么內(nèi)容的,反正循環(huán)的8次就剛好讀進(jìn)來一個(gè)字節(jié)。
比如原來rekay是            ????????
左移1位變成                  ???????0  如果DIO是低電平0就保持這個(gè)
下一趟循環(huán)繼續(xù)左移變成 ??????00  如果DIO是高電平1的話就加上1變成了 ??????01
...
循環(huán)結(jié)束時(shí)就讀夠了一個(gè)字節(jié)的數(shù)據(jù)

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:235200 發(fā)表于 2020-4-25 21:25 | 只看該作者
這段程序是把讀到的鍵盤狀態(tài)存入rekey中,左移1位是為了騰出最右邊的1位空間,加1是當(dāng)狀態(tài)為高電平時(shí),把1存到上述所騰出的最右1位空間處
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表