#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()

{

	int a = 10;

	char b = 'w';

	int arr[10] = { 2 };

	short s = 0;

	printf("%d\n", sizeof(s = a + 5));//结果是2

	printf("%d\n", s);//结果是0

	printf("%d\n", sizeof(a));//4

	printf("%d\n", sizeof(int));//4

	printf("%d\n", sizeof(b));//1

	printf("%d\n", sizeof(char));//1

	printf("%d\n", sizeof(arr));//40

	printf("%d\n", sizeof(int [10]));//40

	return 0;

}

int main()

{

	int a = 7;//将7变成15

	//7二进制是000000000000000000000111

	//15二进制是000000000000000000001111

	//1二进制是000000000000000000000001

	a = a | (1 << 3);

	printf("%d\n", a);

	//将a值变回7

	//1<<3的二进制为00000000000000000001000

	//取反~(1<<3)111111111111111111110111

	//按位与

	a = a & (~(1 << 3));

	printf("%d\n", a);

	return 0;

}

void test1(int arr[])

{

	printf("%d\n", sizeof(arr));//4

}

void test2(char ch[])

{

	printf("%d\n", sizeof(ch));//4

}

int main()

{

	char ch[10] = { 0 };

	int arr[10] = { 0 };

	printf("%d\n", sizeof(ch));//10

	printf("%d\n", sizeof(arr));//40

	test1(arr);

	test2(ch);

	return 0;

}
int main()

{

	int i = 0; int a = 0; int b = 2; int c = 3; int d = 4;

	i = a++ && ++b && d++;//第一个为0假之后后面的运算都不会进行。当条件为||时同理,只要前面为真后面都不会计算

	printf(",a=%d\n,b=%d\n,c=%d\n,d=%d\n", a, b, c, d);//1,2,3,4

	return 0;

}

//三目操作符:如果?那么是:否则是;

int main()

{

	int max = 0;

	int a = 3;

	int b = 8;

	max = a > b ? b : a;

	printf("max=%d\n", max);

	return 0;

}

//创造一个结构体类型

//学生

struct stu

{

	char name[20];

	int age;

	char xh[20];

};

int main()

{

	int a = 20;

	//使用struct stu创建了一个类型xs1并且初始化

	struct stu xs1 = { "牛马",21,"2023072700" };

	printf("%s\n", xs1.name);

	printf("%d\n", xs1.age);

	printf("%s\n", xs1.xh);

	//结构体变量.成员名

	struct stu* ps = &xs1;

	printf("%s\n", (*ps).name);//和下面->意义一样

	printf("%s\n", ps->name);

	printf("%d\n", ps->age);

	printf("%s\n", ps->xh);

	//结构体指针->

	return 0;

}


//隐式类型转换:整形提升、算术转换

int main()

{

	char a = 3;

	char b = 127;

	char c = a + b;


	return 0;

}

//操作符的属性

//复杂表达式求值的三个影响因素:1.操作符的优先级。2,操作符的结合性。3,是否控制求助顺序

//b=c+ --c有歧义,不知道加法前的c是--前准备的还是--后。

//非法表达式

//int main()

//{

// int i = 10;

// i = i-- - --i * (i = -3) * i++ + ++i;

// printf("%d\n", i);

// return 0;

//}//无法确定运算顺序


//设计表达式的时候应该让其有唯一的运算路径