首页 > 其他分享 >c语言学习5

c语言学习5

时间:2023-07-17 20:11:21浏览次数:32  
标签:反码 语言 二进制 补码 学习 八进制 原码 函数

进制转换:
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 % 2 1
0
0111 1111
求权法:
让数据从高位n位开始,数据 - 2^(n-1) ,如果够减,那么第n位为1,否则为0,直到减完为止
134
128 64 32 16 8 4 2 1
1 0 0 0 0 1 1 0
手算:73 62 121 49

练习1:输入一个正整数m,然后输入n(n>=2),显示m的n进制结果,超过10的位用字母表示
    10  A  11 B  12 C ...
    gcc xxx.c && ./a.out

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
127+1 = -128
0111 1111 + 1
1000 0000 -128
for(uint8_t i=0; i<256; i++)
{
printf("a");
}

位运算符:
& | ~ ^ << >>
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

A ^ B   按位异或    相同为零,相异为一(口诀:异或求一,同或求零)
    1010 1110   A   0xAE
    0111 1100   B   0x7C
    --------------
    1101 0010

A << n  按位左移n位,左边超出的丢弃,右边补0
    1010 1110   A << 3
    0111 0000  

A >> n  按位右移n位,右边超出的丢弃,左边补符号位(这点很重要,补的是符号位)
    1010 1110   A >> 3
    1111 0101 

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

函数:Function
一段具有某一项功能的代码集合,是C语言管理代码的最小单位
把代码封装成一个个函数,方便管理和调用代码
1、函数分类:
标准库函数:
C语言标准委员会以函数形式提供的一些基础功能,都被封装在libc.so库中,并且分在了不同的文件中,需要使用时只要把对应的头文件导入即可(例如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 rand(void);
    功能:获取一个随机数
    注意:目前任何编程语言和系统都没有真正的随机数,C编译器是把从0~极大值范围的数值打乱后,存储到一块固定内存中,然后从里面取所谓的随机数

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

    int system(const char *command);
    功能:执行系统命令command
    例如:system("clear");

练习3:获取10个范围[100,1000]之间的随机数,获取次数不能超过10次
    rand()%901 + 100 [a,b]
    rand()%(b-a+1) +a
练习4:双色球规则:6个红球范围1-33 1个蓝球范围1-16
通过程序产生一组随机的中奖号码:红球不能重复
    rand()%33+1
    rand()%16+1

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

第三方库函数:
    一些开源或收费的第三方代码
    GitHub
    md5 
    JSON 序列化和反序列化
    100   "100"  "100"  100
    glog  谷歌日志系统
    XML 配置文件解析程序

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

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

返回值类型 函数名(形参类型1 形参名,形参类型2 形参名,...);
    1、C语言中函数名一般全部小写,可以用下划线分隔
    2、如果不需要参数时,建议写void,不要空着
    3、如果没有返回值,就写void

    函数定义:
        函数的具体实现
返回值类型 函数名(形参类型1 形参名,形参类型2 形参名,...)
{
    //  函数体
    return [val];
}
  
    函数调用:
        函数名(实参1,实参2);
        注意:返回值会放在调用函数语句这里,应该用变量接收或者直接显示,否则再也拿不到

使用函数需要注意的问题:
    函数的隐式声明:
        在函数调用前没有任何该函数的声明或定义,那么就会产生隐式声明
        要避免产生隐式声明,那么就需要在函数调用前有函数声明或函数定义
注意:如果在函数调用前完成了函数的定义,那么函数声明可以省略

标签:反码,语言,二进制,补码,学习,八进制,原码,函数
From: https://www.cnblogs.com/c-learnmore/p/17561066.html

相关文章

  • Java从零基础到架构师再到运维的学习路线
    Java从零基础到架构师再到运维的学习路线1.Java基础知识:-Java语法和基本数据类型-面向对象编程概念:类、对象、继承、封装、多态等-流程控制和循环:条件语句、循环语句-异常处理:异常类型、try-catch-finally块-集合框架:-数组:一维数组和多维数组,数组的操......
  • Spring框架中的设计模式(重点学习!!!)
    Spring中的设计模式Spring框架中用到的设计模式有很多,以下是一些常见的设计模式:依赖注入(DI)和控制反转(IoC):这是Spring框架最核心的设计模式,它允许开发人员将对象之间的依赖关系从代码中抽离出来,由Spring容器负责管理和注入对象之间的依赖关系。工厂模式:Spring框架中的BeanFactor......
  • java语言apache.poi对word相关操作
    packagecom.xxx.business.utils;importcom.alibaba.fastjson.JSONObject;importcom.deepoove.poi.xwpf.NiceXWPFDocument;importcom.xxx.business.course.domain.*;importcom.xxx.business.utils.UtilTools;importcom.xxx.business.utils.domain.JudgeRule;impor......
  • Docker 学习之路之私有仓库搭建
    搭建私有仓库私有仓库其实也是由镜像创建出来的容器,因此私有仓库的搭建和我们利用docker部署应用的步骤是差不多的1.拉取私有仓库镜像dockerpullregistry2.启动私有仓库dockerrun-id--name=registry-p5000:5000registry3.打开浏览器,进入地址http://私有仓库......
  • API接口技术开发分享,获得亚马逊AMAZON国际站商品详情案例,可以多语言请求,支持高并发演
    ​ 响应参数数据展示名称类型必须示例值描述detail_urlString0https://www.amazon.cn/dp/B014QN8RG0?th=1&psc=1商品链接crumbsMix0{"162371071":"徒步鞋、登山鞋","2029189051":"鞋靴","2112046051":"男鞋","......
  • 5.5 集成学习- XGBoost
    1XGBoost的基础思想与实现1.1XGBoostpk梯度提升树极限提升树XGBoost(ExtremeGradientBoosting,XGB,发音/æks-g-boost/)是基于梯度提升树GBDT全面升级的新一代提升算法,也是提升家族中最富盛名、最灵活、最被机器学习竞赛所青睐的算法。不同于我们之前学过的任意单一算法,XGBo......
  • 提示词的学习路径和职业路径
    第一部分:分享我的第三个客制化prompt案例prompt价值:客户需求:一位高校老师(法学院),组建了一个AI学习社团,想给社团成员开发一个用于学习总结的智能机器人应用,鼓励大家通过AI整合和学习知识,激活社团成员对AI工具的理解和学习热情,经过咨询和需求分析,我接受了这个订单。他们对prompt......
  • 算法_贝叶斯网络学习_bayesian networks
    基本概念条件概率联合概率边缘概率链式法则随机变量的独立性条件独立性贝叶斯规则、贝叶斯概率推理和贝叶斯网络模型。stochastic,主要用作形容词,主要意思为“随机的;猜测的”R语言包R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析lme4广义线性混合模型......
  • Python学习——Day 7
    列表·列表需要使用中括号[],元素之间使用英文的逗号进行分隔·列表的创建方式      ·使用中括号      ·调用内置函数list()·列表的特点·列表元素的增加操作#向列表末尾添加一个元素lst=[10,20,30]print('添加元素之前',lst,id(lst))lst.appen......
  • 【cJSON】轻量级的C语言JSON解析器
    1.JSON与cJSONJSON——轻量级的数据格式JSON全称JavaScriptObjectNotation,即JS对象简谱,是一种轻量级的数据格式。它采用完全独立于编程语言的文本格式来存储和表示数据,语法简洁、层次结构清晰,易于人阅读和编写,同时也易于机器解析和生成,有效的提升了网络传输效率。JSON......