顺序程序设计(1)
约 1690 字大约 6 分钟
2024-07-07
18.1转义字符
转义字符 | 字符值 | 输出结果 | 转义字符 | 字符值 | 输出结果 |
---|---|---|---|---|---|
\' | 一个单撇号(') | 具有此8进制的字符 | \" | 一个双撇号(") | 输出此字符 |
? | 一个问号(?) | 输出此字符 | \\ | 一个反斜线(\) | 输出此字符 |
\a | 警告 | 产生视觉或声音信号 | \b | 退格 | 将当前位置后退一个字符 |
\f | 换页 | 将当前位置移到下一页的开头 | \n | 换行 | 将当前位置移到下一行的开头 |
\r | 回车 | 将当前位置移到本行的开头 | \t | 水平制表符 | 将当前位置移到下一个Tab位置 |
\v | 垂直制表符 | 将当前位置移到下一个垂直制表对齐点 | \o、\oo、\ooo | ASCII码 | |
\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 |
只有整型(包括字符型)数据可以加
signed
或uusigned
修饰符,实数型不能加,对无符号整型数据用%u
格式输出
整型数据常见的存储空间和值的范围
字节数 | 类型 | 有符号的取值范围 |
---|---|---|
2 | short,int | -2^15~2^15-1(-32768~32767) |
4 | int,long | -2^31~2^31-1 |
8 | long,long | -2^63~2^63-1 | 字节数 | 类型 | 无符号的取值范围 |
2 | unsigned short,unsigned int | 0~2^16-1 |
4 | unsigned int,unsigned long | 0~2^32-1 |
8 | unsigned long,long | 0~2^64-1 |
类型 | 格式声明 | 十进制 | 八进制 | 十六进制(标红为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 |
类型 | 常量末尾所加符号(建议都大写) |
---|---|
short | NONE |
unsigned short | |
int | |
unsigned int | U,u |
long | L,l |
unsigned long | UL,ul,Ul,uL |
long long | LL,ll,Ll,lL |
unsigned long long | ULL,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;
}