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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8256|回復: 6
收起左側

C語言if(表達式)中表達式不賦值是不是默認為表達式為真的意思

[復制鏈接]
ID:521921 發表于 2019-5-31 16:19 | 顯示全部樓層 |閱讀模式
各位大咖:

         我是小白,在學習單片機C語言過程中,看到有些if(表達式)中的表達式沒有賦值(如下內容中的flag),就直接繼續寫條件下的表達式:

以下程序內容:
我的疑惑:下面程序中,bit flag1s = 0; //1 秒定時標志,在main函數中,while(1)循環中, if (flag1s) //每秒執行一次交通燈刷新,這個條件表達式直接是一個flag1s,沒有賦值,旁邊的解釋說“每秒執行一次交通燈刷新”,這個意思就是flag1s=1,這里不寫這個賦值,是不是就C語言中就默認是為=1呢?

單片機C語言源程序如下:
#include <reg52.h>
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
unsigned char code LedChar[] = { //數碼管顯示字符轉換表
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char LedBuff[7] = { //數碼管+獨立 LED 顯示緩沖區
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
bit flag1s = 0; //1 秒定時標志
unsigned char T0RH = 0; //T0 重載值的高字節
unsigned char T0RL = 0; //T0 重載值的低字節
void ConfigTimer0(unsigned int ms);
void TrafficLight();
void main()
{
EA = 1; //開總中斷
ENLED = 0; //使能數碼管和 LED
ADDR3 = 1;
ConfigTimer0(1); //配置 T0 定時 1ms

while (1)
{
if (flag1s) //每秒執行一次交通燈刷新
{
flag1s = 0;
TrafficLight();
}
}
}

回復

使用道具 舉報

ID:415123 發表于 2019-5-31 20:21 | 顯示全部樓層
代碼不全,應該在某個定時計數1S的代碼里,有bit flag1s = 1;語句。if(flag1s)語句是判斷flag1s是否為0或非0,所以賦值在別的代碼里,非0就是真,就執行刷新代碼。
回復

使用道具 舉報

ID:514901 發表于 2019-5-31 23:02 | 顯示全部樓層
if(表達式)中的表達式不一定需要賦值。if(),括號里面是判斷括號里面的內容是真還是假,0就是假,非零就是真,記住不只是1為真,而是非零的數都為真,比如括號里的內容是語句x==1,就是判斷x是否等于1,如果x等于則得到非零值,不等于1則為0。所以說括號里的內容不一定要是x==1這種類型的判斷語句,也可以是非零值或者0或者變量。
回復

使用道具 舉報

ID:552204 發表于 2019-5-31 23:46 來自觸屏版 | 顯示全部樓層
if判斷的是括號中的邏輯值,如果沒有賦值,括號中的內容如果不是0,那么對于其他任何數都為邏輯1
回復

使用道具 舉報

ID:511890 發表于 2019-6-1 01:08 | 顯示全部樓層
if (flag1s)  flag1s就是一個表達式。相當于flag1s>0括號中的表達式可以是判斷式,也可以是常量,也可以是變量。就如if(flag1s) 當flag1s=0時為假,flag1s不等于0時為真。
回復

使用道具 舉報

ID:550032 發表于 2019-6-2 14:39 | 顯示全部樓層
判斷是真是假;是真就執行if下面的語句,是假不執行if后面的語句
回復

使用道具 舉報

ID:521921 發表于 2019-6-3 09:36 | 顯示全部樓層
明白了,謝謝各位!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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