对于学习代码第二天内容的梳理与总结
#1.注释的两种方法
法一
/*
int a = 0;
a = 2 + 3;
*/
该方法缺点就是不支持嵌套注释(C语言风格)
法二
//int a = 0;
// a = 2 + 3;
该法个人觉得无明显缺点
#2.数据的分类
内置的分类可分为1.字符2.整型3.浮点型4.布尔型
(i)对于字符与整型都可用signed和unsigned来修饰
signed表⽰⼀个类型带有正负号。
unsigned该类型不带有正负号,只能表⽰零和正整数。
二者简单来说就是有无符号的区分。
字符仅有char
而整型中int(整型) short(短整型) long(长整型) long long(更长的吧)
其中int实际为signed int 其中signed被省略
long为long int 其中int可省,其他整型类比
(ii)浮点型包括float(单精度浮点型) double(双精度浮点型) long double
(iii)布尔型(在C99后引入)
仅有_Bool 要引头文件<stdbool.h>
_Bool flag = true;
if (flag)
printf("i like C\n");
变量取值只有true和flase
#3.各类型的长度大小
sizeof 是一个操作符
计算的是变量所占内存的大小,单位是字节
计算的是类型创建的变量所占内存的大小,单位是字节
size_t - 是专门为sizeof 设置的一个类型
size_t 的本质是unsigned int
size_t 类型的数据在打印的时候,格式应该使用%zd
int main()
{
printf("%zd\n", sizeof(char));//1字节
printf("%zd\n", sizeof(short));//2字节
printf("%zd\n", sizeof(int));//4字节
printf("%zd\n", sizeof(long));//4字节
printf("%zd\n", sizeof(long long));//8字节
printf("%zd\n", sizeof(float));//4字节
printf("%zd\n", sizeof(double));//8字节
printf("%zd\n", sizeof(short int));//2字节
printf("%zd\n", sizeof(long int));//4字节
printf("%zd\n", sizeof(unsigned char));//1字节
printf("%zd\n", sizeof(unsigned short));//2字节
printf("%zd\n", sizeof(unsigned int));//4字节
printf("%zd\n", sizeof(unsigned long));//4字节
printf("%zd\n", sizeof(unsigned long long));//8字节
return 0;
}
其中C语言规定sizeof(long)>=sizeof(int)
#4.各数据类型的取值范围
SCHAR_MIN , SCHAR_MAX :signed char 的最⼩值和最⼤值。
• SHRT_MIN , SHRT_MAX :short 的最⼩值和最⼤值。
• INT_MIN , INT_MAX :int 的最⼩值和最⼤值。
• LONG_MIN , LONG_MAX :long 的最⼩值和最⼤值。
• LLONG_MIN , LLONG_MAX :long long 的最⼩值和最⼤值。
• UCHAR_MAX :unsigned char 的最⼤值。
• USHRT_MAX :unsigned short 的最⼤值。
• UINT_MAX :unsigned int 的最⼤值。
• ULONG_MAX :unsigned long 的最⼤值。
• ULLONG_MAX :unsigned long long 的最⼤值。
char的存储范围 -128~127
unsigned char的存储范围 0~255
short的存储范围 - 32768~32767
unsigned short的存储范围 0~65535
int的存储范围(-2147483647 - 1)~2147483647
unsigned int的存储范围 0~4294967295
对于类型的选择应该根据变量的实际范围来确定
#5.变量的创建与赋值
data_type(数据类型) name(变量名);
在创建的时候就给⼀个初始值,就叫初始化。
如下
int age = 18;
age =20;//赋值
char ch = 'w';
赋值与初始化的区分: 赋值是已经初始化了,对初始化过的数值进行修改。
当所给值的类型与初始化类型不同时,如下例子:在98.51后加上f,将原本98.51的double类型转化为float类型
float score = 98.51f
对于连续赋值这种东西,连续赋值,从右向左依次赋值的。
int a = 3;
int b = 5;
int c = 0;
c = b = a+3;//即b=6,后c=6
还有复合赋值
样子如下:
int a = 3;
a = a + 10;
a += 10;//复合赋值
a = a - 4;
a -= 4;//复合赋值
#6.全局变量与局部变量
全局变量:在⼤括号外部定义的变量就是全局变量
全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的
局部变量:在⼤括号内部定义的变量就是局部变量
局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的
易错点:当局部变量和全局变量同名的时候,局部变量优先使⽤。
int n = 100;
int main()
{
int n = 10;
printf("%d\n" n);//打印的结果是多少呢?为10
return 0;
}
#7.除法运算与模运算
(i)除法
在C语言中除号用/。
除法除号两端都是整数时,得出的结果也是整数(执行整数除法)。
如下:
int main()
{
int a = 7 / 2;//7/2=3...1
printf("a = %d\n", a);
return 0;
}
有一端是小数时(执行小数除法)。
如下:
int main()
{
float a = 7.0 / 2;//输出结果为3.500000
printf("a = %f\n", a);
return 0;
}
易错点:以下计算出的结果为0,由于score为5除以20,在计算机中的结果为0,并非我们想象中的小数为0.25,最后的结果为25。若想得到此结果可将20改为20.0,让整除变为浮点数除法。
int main()
{
int score = 5;
score = (score / 20) * 100;//5/20=0...5
return 0;
}
(ii)模
模的运算求余数(整除后的余数)两端只能是整数,即只能用于整型不能用于浮点型。
int main()
{
int x = 6 % 4; // 2
return 0;
}
负数求模规则结果的正负号由第一个运算数决定 (函数)。
如下:
int main()
{
printf("%d\n", 11 % -5); // 1
printf("%d\n",-11 % -5); // -1
printf("%d\n",-11 % 5); // -1
return 0;
}
#8.单目操作符
单目操作符中的++、–、+、-(正负号)
关于自增1的运算,减法同理
int a = 5;
a = a + 1;
a += 1;
a++;
++a;
区别a++与++a(即前置++与后置++的区别)
++a:先+1,后使⽤
例子如下:
int main()
{
int a = 10;
int b = ++a;//++的操作数是a,是放在a的前面的,就是前置++
printf("a=%d b=%d\n", a, b);//a=11,b=11
}
a++:先使用,后+1
例子如下:
int main()
{
int a = 10;
int b = a++;//++的操作数是a,是放在a的后⾯的,就是后置++
printf("a=%d b=%d\n", a, b);//a=11,b=10
}
#9.强制类型转化
简单来讲就是将一种类型强制转化为另一种类型
int a = (int)3.14;//意思是将3.14强制类型转换为int类型,
//这种强制类型转换只取整数部分