C语言的学习笔记(数据存储2)

139 阅读2分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」。​

例:请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序

int main()
{
	//写一段代码告诉我们当前机器的字节序
	int a = 1;
	char* p = (char*)&a;
	if (*p == 1)
	{
		printf("小端\n");
	}
	else {
		printf("大端\n");
	}

	return 0;
}

int check_sys()
{
	int a = 1;
	char* p = (char*)&a;
	return *p
}
int main()
{
	//写一段代码告诉我们当前机器的字节序
	//返回1,小端
	//返回0,大端
	int ret = check_sys();
	if (ret == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

指针类型的意义:

1.指针类型决定了指针解引用操作符能访问几个字节

char*p *p访问了1个字节

int*p  *p访问了4个字节

2.指针类型决定指针+1,-1,加或者减的是几个字节

char*p p+1跳过一个字符

int*p  p+1跳过一个整型 — 4个字节

练习:下面代码的输出结果是多少

@)%@MKKX2_SK1~{7V72VX.png

a=-1 b=-1 c=255 发生了整型提升:整型提升的时候,高位补充符号位,即1。无符号的整形提升,高位补0

练习2:

A4J2A3_(4S$Y32A8DLF%~25.png

}N6G1H4G{18MD~_172U9F{4.png

{
	char a = -128;
	//10000000000000000000000010000000
	//11111111111111111111111101111111
	//11111111111111111111111110000000 补码
	//11111111111111111111111110000000 整型提升后的结果
	printf("%u\n", a);
	//%d 打印十进制有符号整数 
	//%u 打印十进制无符号整数
	return 0;
}

补充:

1、%d 十进制有符号整数。

2、%u 十进制无符号整数。

3、%ld 输出long整数 。

4、%s 字符串。

5、%c 单个字符。

6、%p 指针的值。

7、%e 指数形式的浮点数。

8、%x, %X 无符号以十六进制表示的整数。

9、%0 无符号以八进制表示的整数。

10、%g 自动选择合适的表示法。

char:

signed char\

unsigned char

都储存1个字节,8个bit位

有符号的char的范围:-128—127

无符号的char的范围:0-255