1Bit (1个比特位) ;
1Byte (1个字节) = 1B = 8Bit ;
1KB = 1,024B = 8,192Bit ;
1MB = 1,024KB = 1,048,576B = 8,388,608Bit ;
1GB = 1,024MB = 1,048,57KB = 107,373,568B = 858,988,544Bit ;
1TB = 1,024GB = 1,048,57MB = 107,373,568KB = 109,950,533,632B = 879,604,269,056Bit
sizeof()和strlen()都是计算字符串长度的;但是sizeof是包含\0的,但是strlen()是不包含\0的,
\0 是字符串的结束标识;
sizeof是一个关键字,也是操作符,专门是来用来计算sizeof的操作符数的类型长度的;
单位是字节;
sizeof操作符的操作数可以是类型,也可是变量或者表达式;
sizeof的计算结果是size_t类型的.返回值sizeof_t是无符号的;
strlen是库函数,是专门用来求字符串长度的,使用必须包含头文件#include<string.h>;
strlen求字符串长度的时候,统计的是\0之前的字符的个数
有符号char范围:
有符号char最大值(正数):0111 1111即127,最小值1000 0000(补码) 即-128。
注1000 0000 -1=0111 1111 即2^7-1=128-1=127;
-128即- 2^7;
所以有符号char 取值范围[-128,127];当超过这个取值范围就会溢出。
无符号char取值范围:
无符号最大值即1111 1111 即255,最小值为0;
注:10000 0000 - 1 = 1111 1111即2^8-1即256-1=255;
所以无符号char 取值范围[0,255]。
有符号无符号int取值范围
同理,有符号int 取值范围[- 2^31 , 2^31-1];
无符号int取值范围[ 0,2^32-1]。
单目操作符: ++ -- + -
前置++:++在操作数的前面,先+1,再使用;
后置++:在操作数的后面,先使用,后+1;
前置--(后置--)与++类同;
强制类型转换:在操作数前面加( ),里面的填需要转换的类型;
例:int a = (int)3.14; 意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分;
输出小数时,希望限定小数的位数;
如果希望小数点后面只保留两位,占位符可以写成 %.2f;保留3位小数就是%.3f;
占位符%.5s表示只输出字符串"hello world"的前5个字符,即"hello";
EOF = -1;
赋值忽略符:scanf的输入时,有些符号可能被忽略;所以提供了赋值忽略符
* 只要把*加在任何占位符的百分号后面,该占位符就不会返回值,解析后将被丢弃;(%*c)
scanf("%d-%d-%d",&a,&b,&c) - > 在用户输入成其他的格式,scanf()就会解析失败;
所以要写成scanf("%d%*c%d%*c%d",&a,&b,&c)
goto语句:goto语句可以实现在同一个函数内跳转到设置好的标记出;
建议不使用,如果使用不当就或导致函数内部随意跳转;
多成循环的代码中,如果想快速跳出,就使用goto语句就非常的方便;
rand函数可以生成随机数; 需要包含的头文件是 <stdlib.h>
而rand函数是对一个叫"种子"的基准值进行运算生成的随机数;
srand函数 就是用来初始化随机数的生成器的
使用程序运行的时间作为""种子""的,因为时间时刻在发生变化]
time函数 需要包括头文件<time.h> time函数的返回值设置种子;
time函数返回的这个时间差也被叫做: 时间戳;
因为srand的参数是 unsigned int 类型,我们将time 函数的返回值强制类型转换:
srand((unsigned int)time(NULL));
设置随机数字:
如果我们要设置生成0 ~ 99的随机数: rand()%100
1~100: rand()%100+1;
总结:生成 a~b 的随机数 : a+ rand()%(b-a+1)
sizeof 是c语言中的一个关键字,可以计算类型或者变量大小,同时sizeof也可以计算数组的大小;
计算数组的大小: 计算的是数组所占内存空间的总大小,单位是 "字节";
sizeof计算的是无符号整型,当无符号整型和有符号整型比较时,会把有符号的整型转换成无符号的整型.
二维数组:就是一维数组作为数组的元素;二维数组作为数组元素的数组被称为三维数组,二以上的被称为多维数组;
sqrt函数: 数学函数 需要头文件<math.h>
double sqrt (double x );
sqrt 是函数名
x 是函数的参数,表示调用sqrt函数需要传递一个double类型的值
double 是返回值类型 - 表示函数计算的结果是double类型的值
自定义函数: ret_type fun_name(形式参数)
ret_type 是函数的返回类型
fun_name 是函数名
ret_type 是用来表示函数计算结果的类型,有时候返回的类型可以是void,表示什么都不返回;
函数的参数分为实参和形参:
实参是调用函数时,传递给函数的参数a和b,称为实际参数,简称实参;
实际参数就是真实传递给函数的参数;
形参是函数名括号中的x和y,称为形式参数,简称形参;
"形参是实参的一份临时拷贝"
return语句:
1,return后面可以是一个数值,也可以是一个表达式,如果是表达式则先执行表达式,然后再返回结果;
2,return返回的值和函数返回类型不一致,系统会自动将返回的值隐式转换为函数的返回类型;
3,return语句执行后,函数就彻底返回,后面的代码不再执行;
4,如果函数中存在if等分支的语句,则要保证每种情况下都有return返回,否则会出编译错误
"printf函数返回的是打印在屏幕上的 "字符" 的 "个数"."
static 和 extern都是c语言中的关键字
static是 静态的 意思,可以用来:
1,修饰局部变量
2,修饰全局变量
3,修饰函数
extern 用来声明外部符号的;
作用域:
1.局部变量的作用域是变量所在的局部范围
2,全局变量的作用域是整个工程(项目)
生命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的一个时间段;
1,局部变量的生命周期是:进入作用域变量创建,生命周期开始,出作用域生命周期结束;
2,全局变量的生命周期是:整个程序的生命周期;
使用建议:我们想保留一个变量出函数后,还想保留值,等下一次进入函数继续使用,就可以使用static;
extern 是用来声明外部符号的,如果一个全局的符号在A文件中定义的,在B文件中想使用,就可以使用extern进行声明,然后使用;
(=) -> 赋值 (==) -> 等于
优先级: ! > && > ||
%d -> 整型 int %c -> 字符 char %ld -> 长整型 long int %s -> 字符串 % f -> 浮点型 float
%zd -> size_t 类型 %p -> 指针
%o -> 八进制 %lf -> double %#o -> 带前导的八进制 %x ->十六进制 %5d -> 下面见解
%% ->输出一个百分号 %#x -> 带前导的十六进制
例: 如果printf("%2d",123),则打印123;如果printf("%5d",123),则打印00123;
%id中的i表示最低打几位数;
例: printf("%#x",x) 打印的是0x11;
循环: 循环中一定要有结束条件,不然就是死循环
for() ()中必须是两个"分号";
while循环是至少执行一次;
do-while(); while后面的()一定不能掉;()检查条件是否为真,真的就继续循环;
continue 持续: 用法 :continue是用于终止本次循环的,也就是本次循环中continue后边的代码都不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断;
例1:
int i = 1;while(i <= 10)
{
if(i == 5)
continue;
printf("%d",i);
i++;
}
打印出来的是 1 2 3 4 (光标); 死循环; continue直接终止了后面的循环;
例2:
int i = 0;while(i < 10)
{
i++;
if(i == 5)
continue;
printf("%d\n",i);
}
打印的是1 2 3 4 6 7 8 9 10 没有5 因为5被跳过去了;
switch{case1: ; break; 最后default: ;break;} case是进入, break是结束;
Switch循环相当于一个开关;
各case分支后的常量表达式必须是整数类型或字符型;
判断 if: else :或者