3.28
复习
shell的基本命令
pwd 显示当前所在位置的绝对路径
ls 列出当前路径下的所有文件:ls -a(包括隐藏文件;用来删除重复文件 ·swp);ls -l(显示所有文件的详细信息)
cd :跳转到指定目录
·当前路径 ··上一级路径
touch:创建普通文件(无任何内容)0KB,更新时间戳
mv:1.移动文件 2.重命名
rm:删除文件 rm -r:删除非空目录
cat:查看文件
cp:1.复制文件到当前目录 2.复制文件到指定目录
mkdir:创建目录; rmdir:删除空目录
每个字符串多一个字节; 空格算一个字节
vim编辑器
vim编辑器三种模式:命令 编辑 底行
命令行:复制(yy nyy) 粘贴(p 粘贴最后一次复制的内容) 剪切(dd ndd) 撤销(u 撤销一次操作)
编辑:a(从光标后一个字符)i(从当前字符开始插入) o(从光标的下一行开始插入)
ESC 退出到命令行模式
底行模式: 冒号进入 对文件进行保存退出等功能
q:退出文件 w:保存 wq:保存退出 q!:强制退出 x:强制保存退出
gcc编辑器
将C代码编译成机器可识别的``二进制可执行文件``
gcc+文件名
gcc+文件名+-o+自定义
执行:./文件名
计算机的基本结构
输入设备:鼠标 键盘
输出设备:屏幕 音响
存储器:内存+外存(储存程序、静态) 运算器+控制器=cpu
程序由cpu调动运行,存储在磁盘,被加载到内存中执行
计算机只知道0和1 以0和1的方式存储
程序=编辑+编译、链接+执行、调试
数值数据
十进制:
基数:10 (0-9)
位权表示法:
C语言位数是从0开始,位权*基数^n次方
314:3*10^2+1*10^1+4*10^0
十进制转二进制:
短除法:除二取余,直到商为0,余数倒叙 (适用于数字较小)
534=1000010110
凑数法
534==512+16+4+2==2^9+2^4+2^2+2^1==1000010110
2^8=256 2^10=1024 2^16=65536
2023=10001100011
HEX:16进制--DEC:10进制
二进制:
基数:2(0~1)
二进制转十进制
位权表示法:
10101111==1*2^7+1*2^5+1*2^3+1*2^2+1*2^1+1*2^0=128+32+8+4+2+1=175
十六进制:
A——10 B——11 C--12 D--13 E--14 F--15
基数:16(0~15) 基数是数
十六进制转二进制:将一位十六进制数转为四位二进制数
0x表示这个数为16进制数
0xf312==1111 0011 0001 0010
二进制转十六进制:将四位二进制数转换为一位十六进制数
1101101101111=0x1b6f
十六进制转十进制:
位权表示法:
0xf312==15*16^3+3*16^2+1*16^1+2*16^0=
十进制转十六进制:
先将十进制数转为二进制数,再将二进制数转为十六进制
520=1000001000=0x208
1058=10000100010=0x422
2060=100000001100=0x80c
2080=100000100000=0x820
578=1001000010=0x242
298=100101010=0x12a
八进制:
基数:8(0~7)
八进制转二进制
三位二进制数表示一位八进制数
八进制数034 056 0777(全部权限)
0777==111 111 111
034==11 100
0165277==1110101010111111
八进制转十进制:
位权表示法:02042=2*8^3+4*8^1+2*8^0
十进制转八进制:
将十进制转为二进制,再将二进制数转为八进制
2050==100000000010==04002
非数值数据
不能直接被计算机识别的数据
ASCII码: man ascii 统一了数值数据和非数值数据的一个转换
字符用''表示
NULL--0
'\n' --10
'0' --48
'A' --65
'a' --97
c语言输出函数printf
功能:向终端输出打印指定内容
printf("格式控制串",输出表);
printf("普通字符")
printf("hello world\n"); (\n表示换行)
格式控制串(用双引号) (字符用单引号)
1.普通字符原样输出
%d = 整型数据输出 :int
%c = 输出字符型数据 :char (int就是ASCII码对应右边的数字 char则是左边的所对应的)
%f = 输出浮点型数据 :float (输出的是小数)
输出表:指定输出的内容,多个参数之间由逗号隔开
int main(int argc, char *argv[])
10 {int a;
11 a=3;
12 char b ='*';
13 float c=3.14;
14 printf("a=%c\n",a+b);//相当于将'*'根据ASCII码表转化为整型数据再与a=3相加,最终输出为字符型数据
15 return 0;
16 }
hqyj@ubuntu:~/3.28$ vi 3.c
hqyj@ubuntu:~/3.28$ gcc 3.c
hqyj@ubuntu:~/3.28$ ./a.out
a=-
同理:
#include <stdio.h>
8
9 int main(int argc, char *argv[])
10 {int a;
11 a=3;
12 char b ='*';
13 float c=3.14;
14 printf("a=%d\n",a+b);
15 return 0;
16 }
hqyj@ubuntu:~/3.28$ vi 3.c
hqyj@ubuntu:~/3.28$ gcc 3.c
hqyj@ubuntu:~/3.28$ ./a.out
a=45
词法符号
关键字:32个关键字
系统预定义的特殊的词法,不能由用户自定义
标识符:由用户自定义,用来给各个数据命名
1.有数字,字母,下划线_组成:a,b,ab,a1,b1,jkgjhg,_khl,
2.不能以数字开头
3.不能和关键字重名
分隔符
注释符:
1.// 注释掉//后的这一行所有内容
2./* xxx */ 注释掉中间这xxx内容(习惯于文件开头)
3.#if 0 注释掉中间的语句块
语句块
#endif (可以把不需要测试的功能屏蔽掉)
将0改成1 即可恢复以前(#if 1)
运算符
运算符按功能来分:
算数运算符:+ - * / %(取余符号a%b 左右两侧必须是整数)
int a=5 b=2;
a/2==2 ;(=为赋值,==为等于)
a%b==1
练习:分别得出357的十位个位白位
int a,b,c,d;
13 a=357;
14 // char b ='*';
15 // float c=3.14;
16 printf("b=%d\n",a%10);
17
18 printf("c=%d\n",a/10%10);
19
20 printf("d=%d\n",a/100);
hqyj@ubuntu:~/3.28$ vi 3.c
hqyj@ubuntu:~/3.28$ gcc 3.c
hqyj@ubuntu:~/3.28$ ./a.out
b=7
c=5
d=3
逻辑运算符:&& || !
&&:遇0为0 ||:有1为1
int x=5,y=18;
(x>5)&&(y<20) 0
((x+1)>0)&&(y<17) 0
((x-8)>0)&&(y==18) 0
((x>=5))||(y<20) 1
((x-5)>0)||(y!=8) 1
关系运算符:> < == != >= <=
赋值运算符:= += -= *= /= %= >>= <<=
a+=1-->a=a+1 (左值+=右值-->左值=左值+右值)
位运算符:
正数:
右移:>>(右移n位就舍弃末尾n位)(右移n位等价于除上2的n次方)
int a=50;
110010 右移两位-->1100-->12
左移:<< (左移n位在末尾添加n个0,左边舍去)(左移n位等价于乘上2的n次方)
int a=57;
111001 左移两位-->11100100--> 228
正数的补码和反码相同 (补码就是反码加1)
负数:=(正数补码)
求反码(符号位不变,其他位按位取反)-->+1=补码--补码进行计算
左移:<< (左移n位在末尾添加n个0,但前面要舍去)(左移n位等价于乘上2的n次方)
右移:>>(右移n位就舍弃末尾n位,但左边要添n个1)(右移n位等价于除上2的n次方)
补码(符号位不变,其余取反)-->=反码+1-->=原码
int a=-4
-4----10000100