表达式
表达式是一组序列,由操作符或操作数组成。
表达式的值
C语言中,所有的表达式,都是有值的,所以本节专门讲讲表达式的值。
算数表达式
算数表达式的值,就是算数运算的结果,比如表达式 1 + 1的值就是2,不多说了,直接上代码:
int main(void)
{
int iA ;
int iB ;
iA = 70 ;
iB = 30 ;
printf("iA + iB's value is %d\r\n", iA + iB);
printf("iA * iB's value is %d\r\n", iA * iB);
}
运行结果如下:
关系表达式
关系表达式的值,只有两个:0 和 1,当关系运算符的结果为真时,表达式的值为1;当关系运算符的结果为假时,结果为0。源码如下:
int main(void)
{
int iA ;
int iB ;
iA = 70 ;
iB = 30 ;
printf("iA > iB's value is %d\r\n", iA > iB);
printf("iA < iB's value is %d\r\n", iA < iB);
}
运行结果如下:
逻辑表达式
关于逻辑表达式,要啰嗦一句,逻辑表达式两端的值,0表示假;所有非0值,表示真。当逻辑运算符的结果为真时,表达式的值为1;当关系运算符的结果为假时,结果为0。源码如下:
int main(void)
{
int iA ;
int iB ;
int iC ;
iA = 70 ;
iB = 30 ;
iC = 0 ;
printf("iA == %d, iB == %d, iC == %d\r\n\r\n", iA, iB, iC);
printf("iA && iB's value is %d\r\n", iA && iB);
printf("iA || iB's value is %d\r\n", iA || iB);
printf("iA && iC's value is %d\r\n", iA && iC);
printf("iA || iC's value is %d\r\n", iA || iC);
}
运行结果如下:
位运算表达式
位运算表达式的结果,就是运算符两端的值对应的二进制,逐位运算后的值,比如有两个二进制数: 和
,它俩按位与运算后的结果就是:
,如果看的不是很明白,请观察下面的竖式:
请看源码:
int main(void)
{
int iA ;
int iB ;
iA = 70 ;
iB = 30 ;
printf("iA == 0x%x, iB == 0x%x\r\n\r\n", iA, iB);
printf("iA && iB's value is 0x%x\r\n", iA & iB);
printf("iA || iB's value is 0x%x\r\n", iA | iB);
printf("~iA's value is 0x%x\r\n", ~iA);
}
注意,上面源码打印数字时,用的是%x,其含义是:以十六进制整数打印。运行结果如下:
注意看,因为 iA 是一个int 型的变量,总共占32位的空间,高位是二进制0,,因此 iA 按位取反(运算符 ~)后,高位的0 变成了1 ,因此 ~iA's value is 0xffffffb9
赋值表达式
赋值表达式的值,表达式右边的变量,被赋予的值,比如 a = 3,最终 a 被赋值为3 ,因此表达式 a = 3 的值,就是3 。 源码如下:
int main(void)
{
int iA ;
int iB ;
printf("iA = 70's value is %d\r\n", iA = 70);
printf("iA += 70's value is %d\r\n", iA += 70);
printf("iB = iA ++'s value is %d\r\n", iB = iA ++);
}
运行结果如下: