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

QQ登錄

只需一步,快速開始

搜索

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

查看數(shù): 2589 | 評(píng)論數(shù): 13 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2020-4-25 19:21

正文摘要:

rekey定義為無符號(hào)字符型,首先是將最低位左移歸零,但是后面的rekey不是數(shù)字 1  2  3 4... 累計(jì)增加變化的嗎 ,那在左移是啥操作,比如當(dāng)前rekey是5二進(jìn)制是0101,執(zhí)行左移是不是就是1010 ...

回復(fù)

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

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 。
想問一下你是女、還是男?
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吧
ID:213173 發(fā)表于 2020-4-26 18:39
如果當(dāng)前rekey是5,二進(jìn)制是0000 0101,執(zhí)行左移一位就是0000 1010,然后再加1,就是0000 1011。
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,是不是對(duì)當(dāng)前rekey加的值,進(jìn)行左移的?   想不明白rekey的移位只是一位一位的增加一.比如5+1之后的移位,和0101的移位    。是不是太笨了不適合學(xué)了 ,也知道移位是二進(jìn)制的位在移位,就是想不通,rekey++這一步是怎么和位進(jìn)行聯(lián)系的,rekey++不就是數(shù)值得累加嗎   謝謝指點(diǎn)迷津
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的?
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。
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
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) 。。。 這樣方式的增加的? 那左移是不是就是對(duì)  1(0001) 2(0010) 3(0110) 4(0100) 。。。這些數(shù)左移的,比如當(dāng)前rekey加到了5(0101),下一個(gè)指令是對(duì)5左移,就是0101——變成1010了,我是搞不懂 rekey++不就是數(shù)字的累加嗎,而rekey左移不就是對(duì)當(dāng)前的數(shù)字二進(jìn)制進(jìn)行位移嗎?這樣就對(duì)不上最終結(jié)果了。  這一塊老打不通
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 。。。 這樣方式的增加的? 那左移是不是就是對(duì)  1 2 3 4 。。。這些數(shù)左移的
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ù)

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

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

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

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