学习一门编程语言是一条艰辛与快乐共存的一条路,如今选择了这条路,就应该一直走下去,了解C语言的基础知识,要先对C语言有一个大概的认识,下面我介绍一下C语言的基础。
一.进制转换
十进制转二进制:
短除法:除二倒取余
拆分法:拆成2的次方和 // 66 = 64 + 2 = 2^6 + 2^1 = 1000010
计算器:程序员模式
二进制转十进制:
将有1的位求和
101100 -》=32+8+4=44
八进制转二进制:
八进制以数字0开头
053 = 》101 011
二进制转八进制
从低位开始,3位二进制为一组转化为1位8进制,不够补零
10110101=》010 110 101 =》0265
十六进制转二进制:
一位16进制用4位2进制来表示(8421),不够补零(十六进制0x开头)
0xab => 1010 1011
0x3e7 => 0011 1110 0111
二进制转十六进制
从低位开始,每4位二进制为1组,转化为1位16进制,不够补零
1100 0110=》0xc6
二.ascii
ASCII
'\0' (字符串结束标志) 0
'\n' (换行) 10
' '(空格) 32
字符0 48
字符9 57
'A' 65
'Z' 90
'a' 97
'z' 122
大写字母+32 = 小写字母
小写字母-32 = 大写字母
'0' - 48 = 0
字符0 - 48=数字0
三.词法符号
概念:由若干字符组成的有意义的最小语法单位
分类:关键字(32)、标识符、运算符、分隔符、标点符号
四.关键字
概念:由系统预定义的具有有特殊功能的词法符号
分类:
存储类型:auto(自动型一般沈略) static(静态外部应用) extern(外部引用除了本文件外的东西) register(计算器类型)
数据类型:char(字符型一个字节) short(短整型两个字节) int(整型4个字节) long (长征性4个字节) float(单精度浮点型4个字节) double(双精度浮点型8个字节) signed unsigned
构造类型:struct(结构体:用户自定义) union(共用体) enum (枚举)
选择结构:(if else ) , (switch case default)
循环结构: for , while, do while, goto ,循坏控制语句: break 跳出循坏 continue退出本次循坏只能退一次
其他:void(空类型不能修饰变量可以修饰函数也可以修饰指针,修饰函数表明函数没有返回 值,修饰指针表示任意类型的指针(void *p)) typedef(重定义:类型的重定义) volatile(防止编译器优化)
const(常量化 (只读修饰不能修改),相当于readonly只读) sizeof(计算数据所占空间大 小)、return(返回值)
五.标识符的命名规则
命名规则:
由数字、字母、下划线组成
开头不能是数字
不能和关键字重复
见名知义
六.运算符
算术运算符
逻辑运算符
位运算符
关系运算符
赋值运算符
三目运算符(条件运算符)
算术运算符
+ - * / % ++ --
/:整数相除,向下取整
int a=5/2; //a=2
float a=5/2; //a = 2.000000
float a=5/2.0; //a=2.500000
%:只能用于整数运算
10%3=1
123
获取个位3:123%10
获取十位2:123/10%10 1) 123/10==12 2)12%10 == 2
获取百位1:123/100
逻辑运算符
&&(逻辑与) ||(逻辑或) !(逻辑非)
运算法则:
&&:
全真为真,一假则假
||:
一真则真,全假则假
!:
非真则假,非假则真
截断法则(掌握):
在逻辑与运算中,当前面的表达式为假,则后面的表达式不执行
在逻辑或运算中,当前面的表达式为真,则后面的表达式不执行
位运算符
&(位与) |(位或) ^(异或) ~(取反) << >>
运算法则:
&:全1则1,有0则0
例:0xab & 0x3c
1010 1011
0011 1100
0010 1000
|:有1则1,全0则0
0xab | 0x3c
1010 1011
0011 1100
1011 1111
^:不同为1,相同为0
0xab ^ 0x3c
1010 1011
0011 1100
1001 0111
~:按位取反,1变0,0变1
原码 反码 补码
正数 本身 本身 本身
负数 本身 除符号位其他按位取反 反码+1
~(-12)
-12原码:1000 0000 0000 0000 0000 0000 0000 1100
-12反码:1111 1111 1111 1111 1111 1111 1111 0011
-12补码:1111 1111 1111 1111 1111 1111 1111 0100
~ : 0000 0000 0000 0000 0000 0000 0000 1011
=11
<<左移
左移几位,右边补几个0
8<<2=32
-5<<3=-40
-5原码:1000 0000 0000 0000 0000 0000 0000 0101
-5反码:1111 1111 1111 1111 1111 1111 1111 1010
-5补码:1111 1111 1111 1111 1111 1111 1111 1011
<<3 : 1111 1111 1111 1111 1111 1111 1101 1000
取反码 1000 0000 0000 0000 0000 0000 0010 0111
+1 1000 0000 0000 0000 0000 0000 0010 1000 =-40
>>右移
右移几位,左边补几个符号位(正数0,负数补码前补1)
8>>2 =2
12>>3=1
置位问题:
置零公式、置一公式
置一公式:将一个数a的n位置1:a|(1<<n) (n从0开始)
例:将4的1位置1:
4|(1<<1)
置零公式:将一个数a的n位置0:a&(~(1<<n) ) (n从0开始)
例子:将6的1位置0
6&(~(1<<1))
关系运算符
> < >= <= == !=
10<=x<=60 // 错误
x>=10 && x<=60//正确
赋值运算符
= += -= *= /= %=
a+=3;//a=a+3;
a*=3;//a=a*3;
条件运算符
三目运算符
格式:表达式1?表达式2:表达式3
执行顺序:首先判断表达式1是否成立,如果成立,就执行表达式2,不成立就执行表达式3
int a=3;
int b=5;
int c=a>b?a++:b++;//c=b++; c=5,b=6
运算符优先级
单目运算符! ~ ++ --
算术运算符* / % + -
移位运算符<< >>
关系运算符< <= > >= == !=
位与运算符&
异或运算符^ |
逻辑运算符&& ||
条件运算符?:
赋值运算符= += *= /= %= ...
口诀:单算移关与异或逻条赋
从右向左单条赋
标点符号:分号,逗号,中括号,大括号,小括号
分隔符:换行 TAB 空格
变量:
概念:在程序运行中其值会发生变化的量
定义格式:存储类型 数据类型 变量名
int a;
名称 大小(字节) 取值范围(了解)
char 字符型 1字节 -2^7 ~ 2^7-1
short 短整型 2字节 -2^15 ~ 2^15-1
int 整形 4字节` -2^31 ~ 2^31-1
long 长整型 4字节 -2^31 ~ 2^31-1
float 单精度浮点型 4字节 有效数据位数6-7位
double 双精度浮点型 8字节 有效数据位数15-16位
变量的分类:
区别(掌握)
局部变量 全局变量
定义位置: 定义在函数体内部的变量 定义在函数体外部
初值: 未初始化,值为随机值 未初始化,值为0
存储位置: 栈区 全局区
生命周期: 同所在函数共存亡 同整个程序共存亡
作用域: 作用于函数体内部 作用于整个程序