符号的技巧
专题二:符号的技巧。包括以下章节:
- 注释符号
- 接续符和转义符
- 单引号和双引号
- 逻辑运算符使用分析
- 位运算符分析
- ++、–操作符使用分析
- 优先级和类型转换分析
优先级
#include<stdio.h>
#include<malloc.h>
typedef struct _demo
{
int* pInt;
float f;
}DEMO;
int func(int v, int m)
{
return (v & m != 0); //编译器认为是这样的v&(m!=0)
}
int main()
{
DEMO* pd = (DEMO*)malloc(sizeof(DEMO));
int *p[5];//编译器认为是这样的int* p[5]
int *f();//编译器认为是这样的int* f();一个函数的声明
int i = 0;
i = 1, 2;//编译器认为是这样的(i=1),2
*pd.f = 0;//编译器认为是这样的*(pd.f),编译出错
//应该改为(*pd).f = 0或者pd->f=0
free(pd);
return 0;
}
c语言中的隐式类型转换
算术运算式中,低类型转换为高类型
赋值表达式中,表达式的值转换为左边变量的值
- 函数调用时,实参转换为形参的类型
- 函数返回值,return表达式转换为返回值类型
实例分析7-1
#include<stdio.h>
int main()
{
int i = -2;
unsigned int j = 1;
if((i+j)>=0)
{
printf("i+j>=0\n");
}
else
{
printf("i+j<0\n");
}
//(unsingend int)i+j = 0xfffffffe+0x1=0xffffffff=4294967295
//0xffffffff的补码形式是-1,而%d就是取补码;若%u,就是取无符号整形,是4294967295
printf("i+j=%d\n", i + j);
printf("i+j=%u\n", i + j);
return 0;
}
结果: