c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)

操作符

  • &
  • (类型) 强制类型转换
  • 逻辑操作符
  • 条件操作符(三目操作符)
  • 逗号表达式(逗号隔开的一串表达式)
  • 下标引用,函数调用和结构成员
    • 下标引用操作符
    • 函数调用操作符
    • 访问一个结构的成员
  • 表达式求值
  • 隐式类型转换
    • 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int)
    • 整型提升例子
      • 例2
    • sizeof返回无符号整数所以要用%u来打印
  • 算术转换 (向上转换 跟整型提升相反)
  • 操作符属性
  • 操作符优先级表

&

int main()

 {
	int a = 10;
	printf("%p", &a);

	//取地址取得是二进制,但是肉眼看到是十进制展示

	int* pa = &a;//这里是int因为a也是int  ,pa是用来存放地址的 -pa就是一个指针变量

	*pa;//解引用操作符   间接访问操作符
	*pa = 20; //相当于嘴上最上面的int a=10改成等于20
return 0;
}

(类型) 强制类型转换

c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第1张图片

int main()
{

	int a = (int)3.14;

	return 0;
}

c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第2张图片

char是一个字节
一个指针占4或8个字节
指针大小不论类型

逻辑操作符

int main()
{
	int a = 3;//真
	int b = 0;//假   0为真 非0为假
	/*if (a && b)*///a并且b  两个都满足  有一个为假就是假
	if (a || b)//a或b 有一个满足就满足
	{



	}

	return 0;
}

c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第3张图片

int  main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	//i=a++||++b||d++;  2234(a真后面不用算了), 只要有为真的后面就不用算了
	printf("a=%d\n b=%d\n c=%d\n  d=%d\n", a, b, c, d);//输出结果为1 2 3 4。左边确定为假时右边就不用算了   第一表达式为0后面的表达式就不计算



	return 0;
}




int i = 0, a = 0, b = 2, c = 3, d = 4;
//i=a++||++b||d++;  2234(a真后面不用算了), 只要有为真的后面就不用算了
//结果为1 3  3  4 

条件操作符(三目操作符)

exp1 ? exp2:exp3

int main()
{
	int a = 3;
	int b = 0;
	if (a > 5)
		b = 1;
	else
		b = -1;

	//三木操作符写法
	b=(a > 5 ? 1 : -1);     //如果a真大于5就是1  否则就是-1
	 //表达式1   2    3  对应公式  exp1 ? exp2:exp3。  如果表达式1结果为真 会将2的值赋给b否则将3的结果赋给b。如果1为假则相反



	return 0;
}

逗号表达式(逗号隔开的一串表达式)

exp1,exp2,exp3, …expN

int main()
{
	int a = 3;
	int b = 5;
	int c = 0;
	///逗号表达式要从左到右以此计算,但整个表达式的结果时最后一个表达式的结果
	int d = (c = 5, a = c + 3, b = a - 4, c += 5);

	return 0;
}


if (a = b + 1, c = a / 2, d > 0);//从左往右依次计算   d受前面代码影响

c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第4张图片

下标引用,函数调用和结构成员

下标引用操作符

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	//              0 1 2 3 4 5 6 7 8 9
	printf("%d", arr[4]);//[]就是下标引用操作符      []操作数是2个  arr和4

	return 0;
}

函数调用操作符

int Add(int x, int y)
{//函数的定义

	return x + y;
}


int mian()
{
	int a = 10;
	int b = 20;
	//函数的调用
	int ret = Add(a, b);//必须带这个圆括号


	return 0;
}

访问一个结构的成员

.结构体.成员名
->结构体指针->成员名

//结构成员访问操作符
//.
//->

//结构体

// int float char short 
//double long
//书 :书名 书号   定价




//创建了一个自定义类型
struct Book//可以定义一种新的结构体的类型
{

//定义一本书  描述书所需要的详细信息
	char name[20];
	char id[20];
	int price;


};
int main()
{
	int num = 10;
	struct Book b = {"c语言","C2020202",55};//跟数组类似  有各种各样的元素所以用大括号
	struct Book* pb=&b;//结构体指针所以用struct Book



	//结构体指针->成员名
	printf("书名:%s\n", pb->name);
	printf("书号:%s\n", pb->id);
	printf("价格:%d\n", pb->price);

	/*通过pb访问b*/
		printf("书名:%s\n", (*pb).name);
        printf("书号:%s\n", (*pb).id);
        printf("价格:%d\n", (*pb).price);



	//printf("书名:%s\n", b.name);//后面表示b里面的成员
	//printf("书号:%s\n", b.id);
	//printf("价格:%d\n", b.price);//.的方式可以找到结构体变量里的成员

	return 0;
}

表达式求值

c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第5张图片

隐式类型转换

c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第6张图片
c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第7张图片

截断是只保留最低的字节内容 剩下的扔掉
上边内容的翻译:自己翻译了一下:机器运算的时候最低标准是整型的运算 你这里写的数据没达到整型 编译器会帮你扩成整型传到机器

如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int)

c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第8张图片
无符号位 就是如果用unsigned int就是不管怎么样都补0

整型提升例子

int main()
{
	char a = 0xb6;
	short b = 0xb600;
	int c = 0xb6000000;
	if (a == 0xb6)
		printf("a");
	if (b == 0xb600)
		printf("b");
	if (c == 0xb6000000)
		printf("c");



	
		return 0;//输出结果为c  因为char 和short都发生了整型提升  int不用
}

例2

int main()
{
	char c = 1;
	printf("%u\n", sizeof(c));//char一个字节
	printf("%u\n", sizeof(+c));//+c只要参与运算就会整型提升   提升成4个字节的一个整数
	printf("%u\n", sizeof(-c));
	printf("%u\n", sizeof(!c));
%u是打印一个unsigned的数


	return 0;//输出结果1  4   4  4
}

sizeof返回无符号整数所以要用%u来打印

算术转换 (向上转换 跟整型提升相反)

c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第9张图片

int main()
{
	int a = 4;
	float f = 4.5f;
	a + f;//  a的类型转换成float然后进行计算  字节长度一样  像精度更高的转换

	return 0;
}

操作符属性

c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第10张图片

操作符优先级表

c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第11张图片

c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第12张图片

c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第13张图片
c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第14张图片
c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第15张图片

** na是无结合性**
LR从左向右结合

c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第16张图片
问题代码


c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第17张图片
c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第18张图片


因为使用了static函数 先看fun 第一次进去时2 第二次3 第三次4
代入到main
c语言操作符3 4表达式求值 隐式类型转换,操作符属性 如何进行整型提升(仅限于char 和short类型 只有他两个字节数小于int),整型提升例子,算术转换 (向上转换 跟整型提升相反)_第19张图片

代码运行结果-10 2-3*4
**问题代码 **


你可能感兴趣的:(c语言,算法,c++)