C-class Week2.Day5

本文讲解了二进制在CPU中的核心地位,以及八进制和十六进制的产生背景,重点介绍了进制转换技巧和源码、反码、补码的概念。通过实例演示如何在C代码中操作和理解各种进制,以及函数和标准库在处理字符和数值操作中的应用。
摘要由CSDN通过智能技术生成

进制转换:

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

​ 因为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<<n : 把A的补码向左移动n位 右边补零 超出的丢弃

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<stdlib.h>

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.输入一个整数,显示它的补码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值