• “第五十天” 机组--数据的表示


            数据的表示和运算

    进位计数制

    对于我们现在使用的如十进制计数法,二进制计数法等,符号反映权重,比如十进制的0~9,9这个符号的权重和0是不一样的,而且现在的计数法符号所在位置也反映权重,比如个位上的1 和十位上的 1 的权重也是不一样的。

    计算机组成原理中的"位权"通常指的是二进制数中每个位所代表的数值大小或权重。在二进制表示中,每个位的权值是2的幂次方,从右到左依次递增,通常从0开始。这意味着最右边的位的权值为2^0,接下来一位的权值为2^1,再下一位的权值为2^2,依此类推。r进制的位权也是类似意思。

    基数:每个数码位所用到的不同符号的个数,r进制的基数就是r,比如10进制的基数是10个,0~9,二进制是2个,0~1.

    计算机使用二进制的原因在于:

    1、  可使用两个稳定状态的物理器件表示;

    2、  0,1正好对应逻辑值 假、真 ,方柏霓实现逻辑运算;

    3、  可很方便地使用逻辑门电路实现算术运算。

    二、八、十六进制的相互转换

    二进制 -> 八进制 ,从最低位(小数点前最低位,小数点后最高位)起,每三位一组,每组转换成对应的八进制符号,高位不足补0.

    比如二进制的 1 111 000 010 . 011 010 -> 1 7 0 2 . 3 2

    八进制 -> 二进制 ,每位八进制转化成对应的 3位二进制

    二进制与十六进制的转换也是这个这样的,不过是四对一,这个转换还蛮好用的。

    各种进制的常见书写方式

    二进制 : (10001)₂   100001B   ,这个B可以表示二进制,自己不知道,注意点,下面的H,D都是一样的,记住。

    八进制:(12347)₈
    十六进制:(14ABCDEF)₁₆    1652H (16进制:hexadecimal)  0x1652(这个是,不是o,记住记住)

    十进制:(1689)₁₀  1897(10机制:decimalism)

    这里还有十进制转化成其他进制,不多赘述。

            BCD码:用二进制编码的十进制

    8421码:8421码就是用四位的二进制一一对应表示十进制的 0~9,四位的二进制码权值从高到低就是 8 4 2 1嘛,0000表示0,0001表示1,0010表示2,以此类推,不过这种表示方式 1010~1111是没有定义的,没有对应的值,而且这样如果十进制的 5+8=13 ,对应到8421码上是

    0101 + 1000 =1101,这个1101是不再映射表里面的,处理方法就是对这种不再映射表的值再加 0110 (强制向高位进1),然后得到的值就是十进制对应的二进制结果,如 1101 + 0110 = 1 0011,就是 13 。

    然后还有 余3码:就是再8421码的基础上再加上3 ,比如原本 0000对应的 0,现在是0011对应0;

    还有 2421码:2421码是改变了权值的定义 ,现在这四位二进制的权值分别是 2 4 2 1,4以下,包括4,对应值关系和8421码是一样的,比如4 还是 0100,但4以上的值就定义保证最高位的2为1,这样是为了避免歧义,比如5可以表示为 0101,也可以表示为 1011,但有了最高位的要求,就只能是 1011,这样就避免歧义的发生。也就是说对于2421码,表示 0~4 的时候最高位是 0,表示 5~9的时候最高位是 1.

    这个题,可以用ceil函数实现向上取整,不过我感觉写的这个没有用ceil函数的也挺好玩的。其实主要是我学c的时候还真没有学到ceil函数,就不知道。

    向上取整是指,不小于该值的最小整数,例如 1.2的是2,-2.3的是-2

    向下取整是指,不大于该值的最大整数。

    1. #include<math.h>
    2. int main()
    3. {
    4. int n = 0;
    5. scanf("%d", &n);
    6. float x = 0.;
    7. float y = 0.;
    8. int num = 0;
    9. int i = 0;
    10. float sum = 0.;
    11. for (i = 0; i < n; i++)
    12. {
    13. scanf("%f %f %d", &x, &y, &num);
    14. sum += sqrt(x * x + y * y) / 50*2 + num * 1.5;
    15. }
    16. if(sum-(int)sum==0)//这个地方
    17. printf("%d", (int)sum);
    18. else
    19. printf("%d", (int)sum+1);
    20. return 0;
    21. }

     这个是ceil函数,向上取整。

    然后还有向下取整函数floor,一起先简单学了吧

     这个地方注意一点 : n*=3+1;效果和n*=4;一样,不是先乘三再加一;这里我输入的是3,

    好了刚刚又发现了一个错误,!的级别比%要高,所以应该这样写!(n%2)

  • 相关阅读:
    操作系统伙伴算法仿真c++
    zynq平台移植python3.10.5
    SA+ST表维护height+单调队列维护:CF1073G
    GPT-4o多模态大模型的架构设计
    含文档+PPT+源码等]精品基于Uniapp+SSM实现的新闻APP[包运行成功]计算机毕业设计安卓项目源码
    Springboot项目:连接mysql数据库,使用aop进行日志捕获
    【AI视野·今日CV 计算机视觉论文速览 第248期】Mon, 18 Sep 2023
    Windows和Mac命令窗快速打开文件夹
    PHP代码审计入门-DVWA靶场命令注入篇
    dubbo快速入门
  • 原文地址:https://blog.csdn.net/hh12137/article/details/134042236