Skip to content

顺序程序设计(1)

1690字约6分钟

2024-07-07

18.1转义字符

转义字符字符值输出结果转义字符字符值输出结果
\'一个单撇号(')具有此8进制的字符\"一个双撇号(")输出此字符
?一个问号(?)输出此字符\\一个反斜线(\)输出此字符
\a警告产生视觉或声音信号\b退格将当前位置后退一个字符
\f换页将当前位置移到下一页的开头\n换行将当前位置移到下一行的开头
\r回车将当前位置移到本行的开头\t水平制表符将当前位置移到下一个Tab位置
\v垂直制表符将当前位置移到下一个垂直制表对齐点\o、\oo、\oooASCII码
\xh[h=……](16进制数字)与该16进制码对的ASCII字符与该16进制码对应的字符

18.2字面常量

/*
常量分类:
①字面常量(直接常量):数值常量(分为整型常量和浮点型常量),字符串常量和字符常量
②符号常量
③常变量
*/
#include <dio.h>
int main()
{
	//1.整型常量
	printf("%d\n",2355);
	//2.浮点型常量
	printf("%lf,%lf",3.23,3e-2);
	//3.字符串常量
	printf("%s","%dsaxc\n");
	//4.字符型常量
	printf("%c,%d\n",'a','a');






	printf("%c,%c,%c,%c\n",'\\','\'','\?','\"');
	printf("\a");
	printf("1111\b\n");
	printf("4444\t5555\n");
	printf("\101 \102 \103\n");
	printf("\x41\n");
	return 0;


}

18.3符号常量和常变量

#include <stdio.h>
#define P1 3.14    //1.符号常量 只存在于预编译阶段,编译阶段就不存在了。经过预编译后,全部变为字面常量
#define ID 101
#define CH 'A'
#define S "haha"
int main(void)
{
	printf("%lf,%d,%c,%s\n",P1,ID,CH,S);
const int a =45;   //2.常变量必须在定义的时候初始化,初始化之后其值不可以被修改
//const int b;     error 因为定义常变量未指定初始值
//a = 90;          error 因为常变量的值不可以被修改
	return 0;
}

18.4补码

补码:整型以补码的形式存放

求一个正整数的二进制:除以2,直至商为0,余数倒序排列。

一个负数的补码,先求其绝对值的补码,然后该补码所有位取反,所得之数最后加1

0的补码,所有位全是0

在存放整型存储单元中最左边一位是用来表示符号的。

n进制补码的整数范围

进制整数范围
2进制-2^(2-1)~2*(2-1)-1
8进制-2^(8-1)~2*(8-1)-1
16进制-2^(15-1)~2*(15-1)-1
n进制-2^(n-1)~2*(n-1)-1

只有整型(包括字符型)数据可以加signeduusigned修饰符,实数型不能加,对无符号整型数据用%u格式输出

整型数据常见的存储空间和值的范围

字节数类型有符号的取值范围
2short,int-2^15~2^15-1(-32768~32767)
4int,long-2^31~2^31-1
8long,long-2^63~2^63-1
字节数类型无符号的取值范围
2unsigned short,unsigned int0~2^16-1
4unsigned int,unsigned long0~2^32-1
8unsigned long,long0~2^64-1
### printf与scanf函数不同进制格式声明
类型格式声明
十进制八进制十六进制(标红为printf函数可用)
short%hd,%hi%ho%hx,%hX,%#hx,%#hX
int%d,%i%o%x,%X,%#x,%#X
long%ld,%li%lo%lx,%hX,%#lx,%#lX
long long%lld,%lli%llo%llx,%llX,%#llx,%#llX
unsigned short%hu%ho%hx,%hX,%#hx,%#hX
unsigned int%u%o%x,%X,%#x,%#X
unsigned long%lu%lo%lx,%lX,%#lx,%#lX
unsigned long long%llu%llo%llx,%llX,%#llx,%#llX
### 整型常量的类型转换
类型常量末尾所加符号(建议都大写)
shortNONE
unsigned short
int
unsigned intU,u
longL,l
unsigned longUL,ul,Ul,uL
long longLL,ll,Ll,lL
unsigned long longULL,ull,Ull,UlL,uLL,uLl,ulL,

18.5整型数据类型转换

#include <stdio.h>
int main(void)
{
	//1.定义整型——带符号整型 signed和int可以省略
	short a = 1;
	int b =2;
	long c =4;
	long long d =6;     //可能会报错




	//2.定义整型——无符号类型 int可以省略
	unsigned short e = 5;
	unsigned int f = 3;
	unsigned long g = 2;
	
	//3.求一个数据类型或者数值所占的字节符——使用sizeof运算符,注意它不是函数
	printf("%d,%d,%d\n",sizeof(short),sizeof(int),sizeof 5);
	
	//4.整型数据输出10进制数,所使用的格式声明
	printf("%hd,%d,%ld\n",a,b,c);               //等价于printf("%hi,%i,%li",a,b,c);
	printf("%hu,%u,%lu\n",e,f,g);
	
	//5.整型数据输出8进制或16进制数,所使用的格式声明
	printf("%o,%x,%X,%#x,%#X\n",123,123,123,123,123);
	
	//6.scanf函数中不可以使用带"#"的格式字符


//	scanf("%#x",&b);     error 报错


	//7.隐式数据类型转换——长赋短,截断
	unsigned short us = 1;
	printf("%hu,m%hd\n",us,us);
	
	//8.隐式数据类型转换——”无符号“赋长,先把"短的"全部复制到"长的"低几位,高几位填0
	unsigned int ui =us;
	printf("%u\n,ui");
	
	//9.隐式数据类型转换——带符短赋给长,先把”短的“内容复制到"长的"低几位,如果"短的"是自然数,"长的"高几位填0,如果"短的"是负数,"长的"高几位填1
	short ss = -1;
	ui=ss;
	printf("%u\n",ui);
	
	ss=1;
	ui=ss;
	printf("%u\n",ui);
	
	//10.隐式数据类型转换——等长,则保留原有补码
	ui=-1;
	printf("%u\n",ui);
	
	//11.整型常量——显示数据类型转换
	printf("%u,%ld,%lu\n",1U,1L,1UL);
	
	//12.整型数据的强制数据类型转换——(数据类型)该处的括号为强制类型转换符,是一个单目运算符
	printf("%hu,%d\n",(unsigned short)1,(int)ui);
	return 0;


}