学习记录第二周day2

文章介绍了计算机为何使用二进制、八进制和十六进制,以及如何进行十进制与其他进制之间的转换。此外,详细阐述了原码、反码、补码的概念,位运算符的使用,并提到了C语言中的函数,包括标准库函数、系统函数和自定义函数的声明、定义及调用方法。
摘要由CSDN通过智能技术生成

进制转换

1、为什么使用二进制、八进制、十六进制

因为目前的CPU只能识别高低两种电平,只能对二进制数据进行计算

二进制虽然能够直接被计算机识别,不方便人去书写和记录,因此就把二进制数据转化成八进制,方便记录到文档中

随着CPU的位数不断增加,已经到目前的64位,所以八进制不再能够满足需求,因此发展出现在的十六进制,由于历史原因八进制还不能退出历史舞台

2、十进制转二进制(其他进制)

求余法:

用2不停地对数据求余,然后继续对商求余,直到商为0结束,在过程中得到的余数(逆序)就是该数据的二进制

127%2 1

63%2 1

31%2 1

15%2 1

7%2 1

3%2 1

1

求权法:

让数据从高位n为开始,数据-2^(n-1),如果够减,那么第n位为1,否则为0,直到减完为止

134

128 64 32 16 8 4 2 1

1 0 0 0 0 1 1 0

3、二进制转十进制

每位乘权位2^(n-1),求和

10011001 128+16+8+1

4、二进制转八进制

从低位起,每三个二进制位对应一个八进制位

二进制:10 101 110 111 100

八进制:2 5 6 7 4

5、二进制转十六进制

从低位起,每四个二进制位对应一个十六进制位

二进制: 10 1011 1011 1100

十六进制:2 B B C

6、不同进制在程序的显示:

在C代码中以0开头的数据是八进制数据,以0x/0X开头的是十六进制数据

%x 让数据以十六进制显示

%o 让数据以八进制显示

%#x/%#o 显示数据对应的进制前缀

7、原码、反码、补码

原码:数据的二进制

反码:

正数的原码就是反码

负数的反码的是它的原码符号位不变,其它为按位求反

补码:

所有数据在计算机中,都是以补码形式存储

正数的原码就是补码

负数的补码:

1、转换成二进制得到原码

2、原码符号位不变,其余按位求反,得到反码

3、反码+1,得到补码

-127

1111 1111 原码

1000 0000 反码

1000 0001 补码

8、如何拿补码转成数据

先确定是有符号还是无符号

1、无符号\有符号且最高位是0,补码直接转成十进制

2、有符号的且最高位为1

a、补码-1,得到补码

b、符号位不变,其余位按位求反,得到原码

c、原码转十进制数

1111 1111 补码

1111 1110 反码

1000 0001 原码

-1

位运算符:

& | ~ ^ << >>

A & B 按位相与

1010 1110 A 0xAE

0111 1100 B 0x7C

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

0010 1100 C 0x2C

A | B 按位相或

1010 1110 A 0xAE

0111 1100 B 0x7C

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

1111 1110 C

~A 按位求反

1010 1110 A 0xAE

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

0101 0001 C

A^B 按位异或,相同为零,想异为一

1010 1110 A 0xAE

0111 1100 B 0x7C

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

1101 0010

A << n 按位左移n位,左边超出的丢弃,右边补零

1010 1110 A << 3

0111 0000

A >> n 按位右移n位,右边超出丢弃,左边补符号位

1010 1110 A >> 3

1111 0101

注意:只要式子中出现位运算符,必须转换成二进制补码在进行运算

函数:Function

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

把代码封装成一个个函数,方便管理和调用代码

1、函数分类:

标准库函数:

C语言标准委员会以函数形式提供的一些基础功能,都被分装在libc.o库中,并且分在了不同的

的文件中,需要使用时,只要把对应的头文件导入即可,(stdio.h……),然后通过具体的 函数

名(参数)即可完成调用

#include <time.h>

time_t time(time_t *tloc);

功能:获取自1970-1-1 0:0:0 到调用是总共过了的秒数

用法:time_t sec=time(NULL);

#include <stdlib.h>

int main(void)

int rand_r(unsigned int *seedp);

功能:获取一个随机数

注意:目前任何编程语言和系统都没有真正的随机数,C编译器是从0~极大值范围的数值打乱后,存储到一块固定内存中,然后从里面所谓的随机数

void srand(unsigned int seed);

功能:种随机种子,设计从随机数内存的某个位置开始取随机数,为了实现类似真随机的效果,seed位置一般使用time(NULL)来设置

int system(const char *command);

功能:执行系统命令

例如:system("clear");

系统函数:

操作系统以函数形式提供的一些功能接口,但是系统函数不是真正的函数

第三方函数:

一些开源或收费的第三方代码

GitHub

md5 单项加密

JSON 序列化和反序列化

glog 谷歌日志系统

XML 配置文件解析程序

自定义函数:

为了更好地管理代码,减少代码冗余,把代码分装成自定义函数

函数声明:

函数声明的目的为了告诉其他代码的调用者,该函数的调用格式

格式

返回值类型 函数名(形参类型1 形参名,形参类型2 形参名,……);

1、C语言中函数名一般全部小写,可以用下划线分隔

2、如果不需要参数时,建议写void,不要空着

3、如果没有返回值就写void

函数定义:

函数的具体实现

返回值类型 函数名(形参类型1 形参名,形参类型2 形参名,……)

{

//函数体

}

函数调用:

函数名(实参1,实参2……);

注意:返回值会放在调用函数语句这里,应该用变量接受或者直接显示,否则再也拿不到

使用函数需要注意的问题:

函数的隐式声明:

在函数调用前没有任何该函数的声明或定义,那么就会产生隐式声明

要避免产生隐式声明,那么就需要在函数调用前有函数声明或函数定义

注意:如果在函数调用前完成函数的定义,那么函数声明可以省略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值