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

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

QQ登錄

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

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

關(guān)于C語(yǔ)言--b的問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
#include"reg52.h"
#include"intrins.h"
#define led P2
typedef unsigned char u8;
typedef unsigned int u16;
u8 b=2,c=1;                                 

void delay(u16 i)               
{
        while(i--);
}

void main()
{
        u8 a;
        led=0xfe;
        delay(65535);
        while(c>0)                        
        {
                c=--b;                             
                for(a=0;a<7;a++)           
                {        
                        led=_crol_(led,1);
                        delay(65535);
                }
                for(a=0;a<7;a++)
                {
                        led=_cror_(led,1);
                        delay(65535);
                }
        }
}

求大神指c=--b,b自減為1,賦值給c,循環(huán)一次,b再自減為0,賦值給c,不是應(yīng)該循環(huán)兩次嗎,為什么無(wú)限次循環(huán)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:84283 發(fā)表于 2018-1-28 14:32 | 只看該作者
感覺(jué)B=B-- 也是一樣的效果啊
回復(fù)

使用道具 舉報(bào)

板凳
ID:258566 發(fā)表于 2018-1-28 14:36 | 只看該作者
根據(jù)第六行u8 b=2; b=b--,等效為b=2,
IEEE標(biāo)準(zhǔn)過(guò)程如下,副本作用
TEMPb=b;b=b-1;b=TEMPb;

在非標(biāo)準(zhǔn)編譯器中可能有不能的行為。
回復(fù)

使用道具 舉報(bào)

地板
ID:270522 發(fā)表于 2018-1-28 15:49 | 只看該作者
cccc888 發(fā)表于 2018-1-28 14:36
根據(jù)第六行u8 b=2; b=b--,等效為b=2,
IEEE標(biāo)準(zhǔn)過(guò)程如下,副本作用
TEMPb=b;b=b-1;b=TEMPb;

就是說(shuō)b一直都為原來(lái)的值,謝謝,那為什么c=--b也是無(wú)限循環(huán)啊
回復(fù)

使用道具 舉報(bào)

5#
ID:270522 發(fā)表于 2018-1-28 15:51 | 只看該作者
qq1105424012 發(fā)表于 2018-1-28 14:32
感覺(jué)B=B-- 也是一樣的效果啊

b=--b的話只循環(huán)兩次,b=b--的話就無(wú)限循環(huán)了
回復(fù)

使用道具 舉報(bào)

6#
ID:213173 發(fā)表于 2018-1-28 16:59 | 只看該作者
你理解是對(duì)的, while(c>0)花括號(hào)里內(nèi)容只能循環(huán)兩次,程序結(jié)束,但可以再次進(jìn)入main(), b、c都被初始化,所以目測(cè)感覺(jué)在無(wú)限循環(huán)。把程序略改一下就可以驗(yàn)證:

#include"reg52.h"
#include"intrins.h"
#define led P2
typedef unsigned char u8;
typedef unsigned int u16;
u8 b=2,c=1;                                 

void delay(u16 i)               
{
         while(i--);
}

void main()
{
        u8 a;
        led=0x00;        //加一條全亮語(yǔ)句,可以看到反復(fù)被執(zhí)行。
        delay(65535);
        led=0xfe;
        delay(65535);
        while(c>0)                        
        {
                c=--b;                             
                for(a=0;a<7;a++)           
                {        
                        led=_crol_(led,1);
                        delay(65535);
                }
                for(a=0;a<7;a++)
                {
                        led=_cror_(led,1);
                        delay(65535);
                }
        }
}
回復(fù)

使用道具 舉報(bào)

7#
ID:270522 發(fā)表于 2018-1-28 17:55 | 只看該作者
wulin 發(fā)表于 2018-1-28 16:59
你理解是對(duì)的, while(c>0)花括號(hào)里內(nèi)容只能循環(huán)兩次,程序結(jié)束,但可以再次進(jìn)入main(), b、c都被初始化, ...

謝謝大神,但是為什么我把c=--b改成c=b--就執(zhí)行三次就結(jié)束了,不會(huì)被初始化呢
回復(fù)

使用道具 舉報(bào)

8#
ID:7485 發(fā)表于 2018-1-28 20:12 | 只看該作者
一個(gè)是先減后賦值,一個(gè)是先賦值后減。
回復(fù)

使用道具 舉報(bào)

9#
ID:213173 發(fā)表于 2018-1-28 20:59 | 只看該作者
zhuwushi 發(fā)表于 2018-1-28 17:55
謝謝大神,但是為什么我把c=--b改成c=b--就執(zhí)行三次就結(jié)束了,不會(huì)被初始化呢

--b;和b--;單獨(dú)使用沒(méi)有區(qū)別,如用于賦值或運(yùn)算是不一樣的。
c=--b;為b先自減1后再賦值,此時(shí)c=1,b=1。
c=b--;為b先賦值后再自減1,此時(shí)c=2,b=1。
所以while(c>0)花括號(hào)內(nèi)容執(zhí)行3次。

回復(fù)

使用道具 舉報(bào)

10#
ID:270522 發(fā)表于 2018-1-31 16:38 | 只看該作者
wulin 發(fā)表于 2018-1-28 20:59
--b;和b--;單獨(dú)使用沒(méi)有區(qū)別,如用于賦值或運(yùn)算是不一樣的。
c=--b;為b先自減1后再賦值,此時(shí)c=1,b=1。 ...

是后賦值的會(huì)初始化,先賦值再自減的不會(huì)再初始化的意思嗎
回復(fù)

使用道具 舉報(bào)

11#
ID:213173 發(fā)表于 2018-1-31 21:19 | 只看該作者
zhuwushi 發(fā)表于 2018-1-31 16:38
是后賦值的會(huì)初始化,先賦值再自減的不會(huì)再初始化的意思嗎

你這樣理解是錯(cuò)誤的。在這個(gè)程序中寫c=--b;或c=b--;只會(huì)影響while(c>0)花括號(hào)內(nèi)容循環(huán)2此或3次,與變量初始化沒(méi)有直接關(guān)系。我前述所說(shuō)的初始化是指while(c>0)花括號(hào)內(nèi)容循環(huán)2次以后main函數(shù)運(yùn)行結(jié)束,如果能夠再次進(jìn)入main函數(shù)運(yùn)行就會(huì)初始化b、c。由于這個(gè)程序?qū)懙貌灰?guī)范,通常main函數(shù)里都會(huì)用while(1),保證程序永遠(yuǎn)在其內(nèi)循環(huán),除了斷電不會(huì)結(jié)束。沒(méi)有任何資料說(shuō)明main函數(shù)運(yùn)行結(jié)束肯定會(huì)再次重新開(kāi)始執(zhí)行main函數(shù),據(jù)說(shuō)就這個(gè)問(wèn)題不同的編譯器可能會(huì)有不同的結(jié)果。我前述回答你的提問(wèn)是把你的程序在Keil uVision2編譯環(huán)境的調(diào)試狀態(tài)確認(rèn)的,并不能代表其它編譯環(huán)境也得到這樣的結(jié)果。
回復(fù)

使用道具 舉報(bào)

12#
ID:213173 發(fā)表于 2018-1-31 21:23 | 只看該作者
zhuwushi 發(fā)表于 2018-1-31 16:38
是后賦值的會(huì)初始化,先賦值再自減的不會(huì)再初始化的意思嗎

你可以把這個(gè)程序在編譯器的調(diào)試狀態(tài)單步運(yùn)行查看運(yùn)行狀態(tài)。
回復(fù)

使用道具 舉報(bào)

13#
ID:232585 發(fā)表于 2018-2-3 10:42 | 只看該作者
main函數(shù)結(jié)束后的執(zhí)行過(guò)程是未定義的
回復(fù)

使用道具 舉報(bào)

14#
ID:281828 發(fā)表于 2018-2-3 14:36 | 只看該作者
理論計(jì)算與分步調(diào)試都可以看到結(jié)果如下:
c=b--;時(shí)算式為c=b-1,運(yùn)行步驟為1.賦值后進(jìn)行減一操作。結(jié)果為c=2;b=1;步驟2.再次賦值和減一操作。結(jié)果為c=1;b=0;步驟3.重復(fù)上述操作。c=0;b=0xff;第4次直接跳出循環(huán)了。
c=--b;時(shí),算式為c=c-b=1-2;經(jīng)過(guò)一次循環(huán)后就變成了c=0xff-2,經(jīng)過(guò)128次以后應(yīng)該也能跳出循環(huán)。
回復(fù)

使用道具 舉報(bào)

15#
ID:282046 發(fā)表于 2018-2-4 17:30 來(lái)自觸屏版 | 只看該作者
b=-b的話只循環(huán)兩次,b=b--的話就無(wú)限循環(huán)了
回復(fù)

使用道具 舉報(bào)

16#
ID:270522 發(fā)表于 2018-2-8 19:26 | 只看該作者
wulin 發(fā)表于 2018-1-31 21:19
你這樣理解是錯(cuò)誤的。在這個(gè)程序中寫c=--b;或c=b--;只會(huì)影響while(c>0)花括號(hào)內(nèi)容循環(huán)2此或3次,與變量初 ...

好的謝謝
回復(fù)

使用道具 舉報(bào)

17#
ID:270522 發(fā)表于 2018-2-8 21:27 | 只看該作者
無(wú)線電菜蟲 發(fā)表于 2018-2-3 10:42
main函數(shù)結(jié)束后的執(zhí)行過(guò)程是未定義的

好的了解
回復(fù)

使用道具 舉報(bào)

18#
ID:283238 發(fā)表于 2018-2-9 08:35 | 只看該作者

根據(jù)第六行u8 b=2; b=b--,等效為b=2,
IEEE標(biāo)準(zhǔn)過(guò)程如下,副本作用
TEMPb=b;b=b-1;b=TEMPb;

在非標(biāo)準(zhǔn)編譯器中可能有不能的行為。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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