C基础 温故(上)

最小的存储单元是比特

最小可寻址单元是是 字节

八个比特成一个  字节


二进制如何表示正负

1.对于有符号数,最高位被计算机系统规定为符号位,0 为正,1为负

2.对于无符号数,最高为被计算机系统规定为数据位

例子

+1 = 0000 0000 0000 0001(最高位0表示整数)

-1 = 1000 0000 0000 0001(最高位1表示负数)

其中+1-1叫做真值,二进制数叫做机器数

                  


数字  在计算机中  用二进制补码的形式来存储


如何计算补码

整数     原码  反码  补码  都一样

负数  反码 = 符号位不变  其他位取反

 补码 = 反码 +1

-1的原码:1000 0000 0000 0001 

取反:1111 1111 1111 1110 

-1的补码:1111 1111 1111 1111 

补码转回原码 = 补码符号位不变,数据位取反,尾+1;

-1的补码:1111 1111 1111 1111 

取反:1000 0000 0000 0000 

-1的原码:1000 0000 0000 0001 


数据类型   整形,字符型char 及实型。其中整形分为   短整型short整形int长整形long    实型分为 单精度型float  双精度型double

auto :声明自动变量 break:跳出当前循环 case:开关语句分支 

char :声明字符型变量或函数返回值类型 const :声明只读变量 continue:结束当前循环,开始下一轮循环 default:开关语句中的其它分支 

do :循环语句的循环体
double :
声明双精度浮点型变量或函数返回值类型
else :
条件语句否定分支( if 连用)
enum :
声明枚举类型 extern:声明变量或函数是在其它文件或本文件的其他位置定义 float:声明浮点型变量或函数返回值类型
for:
一种循环语句 

分区 第二天 运算v7.0(@传智播客-萧四无) 的第 93  

goto:无条件跳转语句
if:
条件语句
int:
声明整型变量或函数
long :
声明长整型变量或函数返回值类型 register:声明寄存器变量 

return :子程序返回语句(可以带参数,也可不带参数) short :声明短整型变量或函数 signed:声明有符号类型变量或函数 sizeof:计算数据类型或变量长度(即所占字节数) static :声明静态变量 

struct:声明结构体类型
switch :用于开关语句 typedef:用以给数据类型取别名 unsigned:声明无符号类型变量或函数 union:声明共用体类型 

void :声明函数无返回值或无参数,声明无类型指针 volatile:说明变量在程序执行中可被隐含地改变 while :循环语句的循环条件 

auto :声明自动变量 break:跳出当前循环 case:开关语句分支 

char :声明字符型变量或函数返回值类型 const :声明只读变量 continue:结束当前循环,开始下一轮循环 default:开关语句中的其它分支 

do :循环语句的循环体
double :
声明双精度浮点型变量或函数返回值类型
else :
条件语句否定分支( if 连用)
enum :
声明枚举类型 extern:声明变量或函数是在其它文件或本文件的其他位置定义 float:声明浮点型变量或函数返回值类型
for:
一种循环语句 

goto:无条件跳转语句
if:
条件语句
int:
声明整型变量或函数
long :
声明长整型变量或函数返回值类型 register:声明寄存器变量 

return :子程序返回语句(可以带参数,也可不带参数) short :声明短整型变量或函数 signed:声明有符号类型变量或函数 sizeof:计算数据类型或变量长度(即所占字节数) static :声明静态变量 


struct:声明结构体类型
switch :用于开关语句 typedef:用以给数据类型取别名 unsigned:声明无符号类型变量或函数 union:声明共用体类型 

void :声明函数无返回值或无参数,声明无类型指针 volatile:说明变量在程序执行中可被隐含地改变 while :循环语句的循环条件 

标示符:程序员在程序中自定义的一些符号和名称

标示符命名规范

1只能由字母、数字、下划线或者美元符号$组成

2不能以数字开头

3不能与关键字重名

4严格区分大小写

常见的运算分类:算数运算,关系运算、逻辑运算、按位运算。

算术运算就是:加减乘除

逻辑运算:与或非

关系运算:比较大小 相等  不相等

按位运算:精确到bit一级的运算

表达式就是由运算符、常量及变量构成

所有的表达式都是有结果的,可以作为返回值

求余运算

左边数字的绝对值如果小于右边的绝对值那么结果是左边。

左边数字的绝对值如果是右边数字绝对值的倍数,那么结果是0

左边数字的绝对值如果大于右边数字的绝对值,那么结果是正常余数

求余:操作数必须是整数,获取余数。运算结果的正负与第一个数字相同

算数中的类型转换分为两类:自动转换(隐士转换),强制转换(显示转换)

为什么char类型先转化成int类型呢

在内存中字符的存储实际上是把字符相对应的ASCLL代码放到存储单元中的。而这些ASCLL代码值在计算机中也是以二进制形式存放的。这个与整形的存储很形似。因此这两类之间的转换也比较方便

强制转换表达式

(类型说明符)(表达式)

+= 加后赋值 变量+=表达式 :a+=3;a=a+3 -= 减后赋值 变量-=表达式 :a-=3;a=a-3 

前缀 后缀的概念

把运算符++或者 - - 放在前面如++a就叫前缀运算符,先执行运算符的运算,在用操作数干指定操作,反之叫做后缀运算符  先用操作数干指定操作,再执行运算符的运算

自增和自减只能用于单个变量,不能用于表达式或常量

sizeof运算符

sizeof:单目运算符

用途:获取操作数占用内存大小的字节数

使用形式:sizeof(数据类型)

逻辑运算有个短路为题  &&短路只要一个条件为假,后面表达式就不参与运算了

||短路:只要一个条件为真,后面的表达式就吧参与运算了

进制转换(了解)

10 -> 2 : 2取余法,10进制数除以2,然后取得余数的序列,再倒序 2 -> 10 : 所有位的位权相加 101 = 1*2^0+0*2^1+1*2^2 

2 --> 16 : 41, 整数部分从右向左 4位结合成一位,小数部分从左向右4位结合1, 不足 部分补

16 -->2 : 14, 16进制的1位拆成二进制的4 2-->8 :31
8-->2 :1

10-->8 :8取余 8-->10: 8-->2-->10 16 --> 10: 16 -->2 -->10 (128页)

位运算  用途:直接操作二进制,省内存,效率高 

只能用于整形操作数(char,short,int,long)

1.&按位与   全1才1,否则0

9&12 = 9

     1 0 0 1

&  1 1 0 1

———————————

     1 0 0 1  = 9

2.  |按位或   有1就1

3.^ 按位异或  不同为1  

9^13 = 4;

4. ~取反  先各二进位进行取反后(0边1,1变0)符号位跟着一块算

~9 = -10

~9 =-10 

1001

 ~ 

-------------- 

0110 

0 1001 

1 0110
原码 = 补码的符号位不变 --- 数据位取反 -->位数加1 1 1001
11010 -----原码-10 



5.《左移  各二进制玩不左移n位,高位丢弃,地位补0;左移会改变一个数的正负性;左移1相当于*2;左移用途,快速计算一个数乘以2的n词方(8《3 等同于8*2^3)

移除位砍掉,移进的位补零

6.》右移 各二进位全部右移n位,保持符号位不变

移出的位删掉,移进补符号号位

右移相当于除以2的n次方(8》等同于8/2^3)

运算技巧

1)任何数和1进行&操作,得到这个数的最低位 数字&1 =数字的二进制形式的最低位 

三目运算符

基本格式     (关系表达式)?表达式1:表达式2;执行流程   如果表达式为真返回表达式1,如果表达式为假,返回表达式2;

程序控制流程  分类:顺序结构,选择结构,循环结构

1Switch分支语句

1)使用格式 

switch(变量){
case 常量表达式1: 

语句1; 

break; 

case 常量表达式2: 

语句2; 

break; 

case 常量表达式n: 

语句n; 

break; 

default: 

语句n+1; 

break; 

执行顺序 : 计算表达式A的值

a顺序与常量表达式1,2..n的值比较。 遇到与a相等的值,则执行对应的语句,执行语句完毕,遇到break, switch块。
a与所有常量表达式的值都不相等。 

则执行 default对应的 语句n+1, 执行完毕遇到break,跳出switch块。 

case后面只能是常量,或者常量表达式

do while  和 while循环的区别在于while是先判断循环条件,再循环,而do —white是先执行后判断,所以即使表达式为假也会执行一次


函数分为 库函数和用户定义函数

函数的基本格式

函数的定义到使用分三步1.声明,2实现(定义)函数3.调用函数

返回值类型  函数名称 (数据类型  变量名1,数据类型  变量名2...){

函数体

return 对应类型的结果;

}

全局变量说明

(1)外部变量定义必须在所有的函数之外,且只能定义一次

(2)在同一源文件中,允许全局变量和局部变量同名,在局部变量的作用域内全局变量不起作用(强龙不压地头蛇)。

因为存储在不同片区

代码区  函数代码

静态存储区 全局变量,静态变量

堆区  动态内存

栈区  局部变量、函数形参等

(3) 如果外部变量定义在某函数的下面,则要使用该外部变量的时候一定 要进行说明 

外部变量说明的一般形式为:
extern
类型说明符 变量名,变量名,...; 

(4)在整个程序内,可以出现多次外部变量的说明,但是外部变量在说 明的时候 不能再赋初始值 

外部变量在定义时就已分配了内存单元,外部变量定义可作可作初始赋值, 在说明的时候只是表明在函数内要使用某外部变量。 

(5)外部变量可加强函数模块之间的数据联系,但是又使函数要依赖这些变 ,因而使得函数的独立性降低。从模块化程序设计的观点来看这是不利 , 因此在不必要时尽量不要使用全局变量。 


#include指令

文件包含是C预处理程序的另一个重要功能。作用是告诉编译器我们要使用哪个“工具箱”中的工具了。

#include有两种情况

(1)“”是用户定义的文件,可以是头文件,也可是普通文件

(2)<>是包含了一个系统的头文件

注意include语句后面不需要加分号,因为他是一个预处理指令,不是一个语句

#include文件搜搜顺序

当前文件夹—>编译器include文件夹——>系统include文件夹——>如果找不到报错


数组的一般形式

类型说明符  数组名[常量表达式];

数组中的元素是从0开始的,不能在方括号中,用变量最为元素个数,但是可以是常量或者常量表达式

数组初始化是在编译阶段进行的,这样将减少运行时间,提高效率。

静态初始化:定义的同时是初始化

动态初始化:先定义,后初始化

常见的形式

类型说明符 数组名[常量表达式]={值,值,值,值…};

指定元素的个数,同时对所有的元素进行显式的初始化 

int nums[3] = {10,11,12}; 


不指定元素个数,同时对所有的元素进行显式的初始化。(它是根据大括号中的元素的个 数来确定数组的元素的个数

int nums[] = {10,11,12};


指定元素个数,同时给指定元素进行初始化标号。

int nums[3] = {[0] = 3,[1] = 2}; 

 

指定元素个数,对数组进行部分显式初始化 

int nums[3] = {4};

数组首地址与与第一个元素地址相同

数组的总字节数 = sizeof(数组名)

数组的长度(元素个数)= sizeof(数组名)/sizeof(数据类型);


字符串   

字符串\0结束,所占字节比实际多一个

字符串的定义

char 数组名[常量表达式]

二维数组

char 数组名[常量表达式1][常量表达式2]

注意:定义数组的时候应确保数组长度比字符串长度至少多一位

字符数组初始化

(1)char c[4]={‘d’,’e’,’d’}

(2)char c2[4]={“awe”}

(3)char c3[4]=“qwe”

未被使用的元素均被自动初始化为\0

%s进行输出字符数组

因为数组名就首地址,因此在输出时数组名不用加&

不指定数组长度,要计算数组长度用while循环,因为结果就是要循环次数,判断条件不等于‘\0’

1 字符串输出函数:puts 可以自动换行

2、字符串输入函数:gets 接受空格

3、字符串连接函数:strcat 

0)strcat 函数介绍,使用该函数必须要引入头文件 

1)格式:strcat(oldStr,newStr);
2) oldStr的长度要足够到,只要能够保存下oldStr+newStr 

3) newStr oldStr的最后一个字符\0给覆盖了 

字符串拷贝函数strcpy 

strcpy(字符数组名1,字符数组名2) 功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“\0”也一同拷贝。字符数名 2, 也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。 

字符串比较函数strcmp 

格式: strcmp(字符数组名1,字符数组名2) 功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。 字符串1=字符串2,返回值=0;
字符串1>字符串2,返回值>0;
字符串1<字符串2,返回值<0 

测字符串长度函数strlen 

格式: strlen(字符数组名

功能:测字符串的实际长度(不含字符串结束标志‘\0’)并作为函数返回值。 


指针

用一个变量去存储指针, 这样的变量叫指针变量。 

指针变量定义的一般形式:
基类型 * 指针变量名

























你可能感兴趣的:(C基础 温故(上))