进制转换*
例:十进制转换二进制:
-
求余法
商为0结束 n%2=0|1 商%2=0|1 直到商为0 如:127%2 1 得到:0111111 63%2 1 31%2 1 15%2 1 7%2 1 3%2 1 1%2 1 0
-
求权法
1 2 4 8 16 32 64 126 1001111 111111 1111001 110001
二进制转换成8或16进制是为了方便记录
二进制转八进制
三个二进制对应三位八进制:
short 10101100 10101100
1 010 110 010 101 100
二进制转换十六进制
short 1010110010101100
A C A C
在C代码中以0开头的是八进制数以0x开头的十六进制
%x 以十六进制形式显示数据(是整数)
%o 以八进制显示数据
原码、反码、补码
原码:数据绝对值的二进制
反码:原码按位求反
补码:数据在内存存储的二进制
整数的原码就是补码
负数的补码:绝对值->原码->按位求反->反码->+1->补码
反码+1得到补码
补码转换成数据
无符号补码之间转换成十进制
最高位是0,说明是正数,也直接转换成十进制
有符号且最高位是1:
1 补码-1得到反码
2 反码按位求反得到原码
3 原码转换成10进制
11111111 补码有符号
11111110 反码
00000001 反码
-1
00000000-1之后变成11111111
计算机中的数据都是有类型的(存储空间是固定的,最大值+1变最小值)
位运算符:
A & B 针对补码的按位相与
01011010 0x5A
11000011 0xC3
-------------
01000010 0x42
A | B 按位或
01011010 0x5A
11000011 0xC3
-------------
11011011 0xdb
~A 按位求反
01011010 0x5A
10100101 0xA5
-------------
A ^ B 相同是0不同是1
01011010 0x5A
11000011 0xC3
-------------
10011001 0x99
A << n 把A的补码左移n位,左边的丢弃 右边的补0
确定类型 char int 存的字节不同
A >> n 把A的补码右移n位,左边补符号位 右边丢弃
确定符号位置
函数
一段具有某段功能的代码,是C语言中管理代码的单位
把代码封装成一个个函数,为的是方便管理,方便调用
函数分类:
标准库函数:
C语言标准委员会为C语言以函数形式提供的一些基础功能,封装在lib.c
库中,使用时需要包含头文件,函数名(参数)
如 int isalnum()判断是不是数字字母
int isalpha()当C是字母时返回真
double sqrt(double x)返回X的平方根
double pow(double x,double y);返回X的y次方
doulbe floor(double arg)直接去掉(显示的时候去掉会四舍五入)
void srand(unsigned seed)获取随机种子
srand(time(null))(短时间内重读运行会一样)
系统函数:
是操作系统以函数接口形式提供的功能,这些功能包括
内存管理、信号处理、文件IO、文件管理、进程管理、进程通信、线程管理、
线程同步、网络通信
第三方库函数:
一些开源或者收费的第三方代码
glog 日志记录