C-class Week2.Day5

进制转换:

  • ​ 为什么要二进制,八进制,十六进制?

​ 因为cpu只能识别高低两种电流,所以只能对二进制数据进行运算。二进制虽然可以直接被cpu识别,但是不方便书写

所以把二进制转换为了八进制是为了方便记录在文件中。

​ 随着cpu的不断发展不断地增加,由于八位计算机逐步发展到64位计算机,因此八进制逐渐不能满足需求,所以发展出

了十六进制,由于历史原因八进制还不能退出历史舞台(例如rwz1234)

  • ​ 十进制转换二进制,余二倒去或者加权

​ 练习:

​ 1.输入一个m在输入一个n进制,求n进制的m为多少?

​ 输出的时候 ‘A’+n 来输出字符 不要用数组匹配

注意:二进制数据转换成八进制,十六进制是为了更方便的记录二进制数据。

​ 熟练掌握2,8,10,16进制的任意转换

在c代码中:以0开头的数据都是八进制数据,以0x开头的都是十六进制数据

%o 是以八进制显示数据 %x 是以十六进制显示数据

%#o、%#x 以对应的进制显示数据,并加上开头前缀显示

源码、反码、补码:

  • ​ 源码:数据的二进制就是源码

​ 正数:1-------0000 0001

​ 负数:-1------1000 0001 最高位符号位

  • ​ 反码:

​ 正数:1------0000 0001 正数源码=反码

​ 负数:-1-----1111 1110 除了符号位不变,其余位按位取反;

  • ​ 补码:

​ 正数:1------0000 0001 正数的补码就是它的源码

​ 负数:-1------1111 1111 1.取到源码 2.取到反码 3.反码+1

-127 + -1 = 1000 0000补码 = -128

注意(%hd,0x81)和(%hhd,0x81)结果不同

补码转数据:

​ 无符号的补码直接转成十进制

​ 有符号的补码 最高位是0:说明是正数 直接转成十进制

​ 最高位是1: 说明是负数

​ 1.补码-1=反码

​ 2.符号位不变,其余按位取反

​ 3.源码转数据

注意:给出一个补码1111 1111 不说明类型

​ 要分情况讨论!

类型:最大值+1 = 最小值

(char i =0;i<128;i++)

{

​ printf("%d",i);

}

死循环了

位运算符 & | ~ ^ << >>

&:按位与 有0出0 全1出1

|:按位或 有1出1 全0出0

~:取反

^:按位异或 不同出1 相同出0

A<

A>>n:把A的补码向右移动n位,右边丢弃,超出的补符号位

练习一:

练习二:输入一个整数,把它的4-7位 变成1010

例如 1100 1001 1110 —> 1100 1010 1110

(n & ~(0xf<<4))| (0xA<<4)

练习三:输入两个整数,把A的4-7位设置为B的3-6位

a & ~(0xf0) | (b<<1 & 0xf0)

函数:function (java中)方法

​ 一段具有某项功能的代码的集合,是c语言中管理代码的最小单位

把代码封装成一个个的函数,是为了方便管理和调用代码。

函数的分类:

​ cpp_ref_ch.chm查看大部分函数

标准库函数:

​ C语言标准委员会为了c语言以函数形式提供的一些基础的功能,被封装在libc.so库中,以头文件形式调用

需要包含头文件,只需要写函数名+(参数)调用即可

isalnum() 当字母或数字字符时, 返回真值
isalpha() 当字母字符时, 返回真值
iscntrl() 当控制字符时, 返回真值
isdigit() 当数字字符时, 返回真值
isgraph() 当非空格可打印字符时, 返回真值
islower() 当小写字母字符时, 返回真值
isprint() 当可打印字符时, 返回真值
ispunct() 当标点字符时, 返回真值
isspace() 当空格字符时, 返回真值
isupper() 当大写字母字符时, 返回真值

​ 以下函数都是libm.so

​ sqrt

​ pow

​ double floor(double arg)

​ 功能:返回小于等于最大整数 向下取整

​ double ceil 向上取整

​ double fabs(doubule arg)

​ 浮点型的arg的绝对值

​ time

​ include < time.h >

#include< stdlib.h >

int sys(const char *command)

#include

void srand(unsigned seed);

功能:种一个随机种子;

int rand(void);

abort() 停止程序执行
assert() 当表达式非真,停止程序执行
atexit() 当程序退出执行设定的程序
bsearch() 执行折半查找
exit() 停止程序执行
getenv() 获取指定环境变量的值
longjmp() 从设定点执行程序
qsort() 执行快速排序
raise() 向程序发送信号
rand() 返回一个随机数
setjmp() 设置程序执行点
signal() 将某函数设置成一个信号句柄
srand() 初始化随机数发生源
system() 执行系统调用
va_arg() 使用可变长度参数列表

练习4:获取10个范围是100-1000的随机数

rand()%901+100

[a,b]

rand()%(b-a) +a

练习5:产生随机双色球6个1-33的数 和1个1-16的数

系统函数:(不是函数)

​ 是操作系统以函数接口形式提供的一些功能;这些功能包括:

​ 内存管理,信号处理,文件IO,文件管理,进程管理,进程通信,线程管理,*网络通信*,线程同步。

第三方库函数:

​ 别人写好的库给你用,比如说 日志记录glog

​ md5 验证 密码加密库

​ json 序列化和反序列化

自定义函数:

​ 为了更好地管理代码,减少冗余把代码封装成函数的形式;

​ 注意:希望你一个函数不要超过50行,一个函数负责一个功能,为了管理代码

函数声明:

​ 函数声明的目的是为了告诉编译器:函数使用的形式

​ 返回值类型:函数名(类型1 变量1,类型2 变量2,…);

​ 要求:1.在c语言中函数名一般小写,用下划线分隔

​ 2.void 指代参数为空 不需要参数 如果给参数就报错,不要空着,如果返回值为空也用void

​ int main也可以 去掉int 但是不建议

​ 3.如果不需要返回值也写void

​ 4.如果void func(int num)声明也可以写成void func (int) 可以 但是不建议!

​ 隐式声明:当调用函数没有定义,就会产生隐式声明,编译器会猜测函数的格式,返回值会猜测成int类型,参数

​ 列表会根据提供的参数来猜测。

函数定义:

​ 返回值类型:函数名(类型1 变量1,类型2 变量2,…)

​ {

​ 函数体

​ 需要返回值

​ return 0

​ (如果是void类型,可以写return;用于结束函数 但是不可以写return 0会警告甚至报错 取决于编译器)

​ }

​ 注意:如果定义写在调用之前,函数声明可以省略。但是目前还是以养成习惯为大前提

函数调用:

​ 函数名(实参);

​ 返回值会放在调用时的位置,可以立即使用,也可以赋值

练习:
1.实现一个函数,判断一个整数是否是素数,显示100-10000之间的所有的素数

​ 2.输入两个日期 计算出两个日期之间相隔了多少天。

​ 3.实现一个函数,判断一个整数是否是回文数,调用函数判断1亿到10亿之间的所有回文数

​ 4.计算100的阶乘

​ 5.输入一个整数,显示它的补码

你可能感兴趣的:(标准C)