1. 进制转换

1.1 十进制 to 二进制

  1. 正整数转二进制:除二取余,然后倒序排列,高位补零。
  2. 负整数转二进制:先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。
  3. 小数转二进制:对小数点以后的数乘以 2,取整,剩余小数再乘以 2,直至小数部分为 0(有可能永远有小数,此时按需停止)

小数部分和整数部分互不影响,分开转换,最后合在一起即可。

1.2 二进制 to 十进制

  1. 整数二进制转十进制:高位补零(比如数据为 8 位),再确定是有符号还是无符号,若是有符号整数,当最高位是 0 为正数,1 为负数;
    正整数,去除符号位,各个位数与对应 2 次幂相乘,最后求和。
    负整数,去除符号位,减一,取反,再换算,记得添加整数的负号。
  2. 小数二进制十进制:各个位数与对应 2 的负次幂相乘,最后求和。

2. 原码、反码和补码

2.1 定义

计算机中的有符号数有三种表示方法,即原码、反码和补码。
三种表示方法均有**符号位**和**数值位**两部分,符号位都是用 0 表示“正”,用 1 表示“负”,而数值位,三种表示方法各不相同。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。

2.2 采用补码运算具有如下两个特征

1)因为使用补码可以将符号位和其他位统一处理,同时,减法也可以按加法来处理,即如果是补码表示的数,不管是加减法都直接用加法运算即可实现。
2)两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

补码有两个好处

1)使符号位能与有效值部分一起参加运算,从而简化运算规则。从而可以简化运算器的结构,提高运算速度;(减法运算可以用加法运算表示出来。)
2)加法运算比减法运算更易于实现。使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。

3. 格雷码

3.1 定义

格雷码(Gray code),又叫循环二进制码或反射二进制码。
在数字系统中只能识别 0 和 1,各种数据要转换为二进制代码才能进行处理。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的 3 转换成 4 时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。格雷码常用于通信,FIFO 或者 RAM 地址寻址计数器中。

3.2 二进制和格雷码转换

  1. 二进制码->格雷码(编码):从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是 0);
# 注意:这里边的i取值范围是0~N-1(N为位宽)
assign gray_value[ i ] = binary_value[ i ] ^ binary_value[ i + 1 ];  # 方式一
assign gray_value[ i ] = binary_value[ i ] ^ binary_value >> 1;      # 方式二
  1. 格雷码-〉二进制码(解码):从左边第二位起,将每位与左边一位解码后的值(这里指的是二进制相邻高位,可不是格雷码相邻高位哦!!!)异或,作为该位解码后的值(最左边一位依然不变).
# 注意:这里边的i取值范围是0~N-2(N为位宽)
assign binary_value[n-1]    = gray_value[n-1];
assign binary_value[ i ] = gray_value[ i ] ^ binary_value[ i + 1 ];

3.3 优缺点

优点:属于压缩状态编码,使用的触发器位数少;相邻状态变换时,仅一位发生改变,电噪声小,转换速度较快;
缺点:译码复杂,没有固定大小,很难直接进行比较大小和算术运算,需要转换为自然二进制码来判断。

3.4 牛刀小试

格雷码计数器

`timescale 1ns/1nsmodule gray_counter(input   clk,input   rst_n,output  reg [3:0] gray_out
);reg [4:0] binary;//counteralways @ (posedge clk or negedge rst_n) begin if(!rst_n) beginbinary <= 5'b0;endelse beginbinary <= binary + 1'b1; endendwire [3:0] binary_out = binary[4:1];//binary to grayalways @ (*) begingray_out[3]= binary_out[3];gray_out[2]= binary_out[3] ^ binary_out[2];gray_out[1]= binary_out[2] ^ binary_out[1];gray_out[0]= binary_out[1] ^ binary_out[0];end
endmodule

这个题有点问题哈!写完之后提交发现每两个时钟周期他才会加一。那咋办?那就增加一位呗,最低位每增加两次,次高位加一,哦了!!!这个题大家看一下思想就行。

4. BCD码

4.1 定义

BCD 码(Binary-Coded Decimal),用 4 位二进制数来表示 1 位十进制中的 0~9 这 10 个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。

5. 独热码

5.1 定义

独热码,在英文文献中称做 one-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为 1,其他全为 0 的一种码制。通常,在通信网络协议栈中,使用八位或者十六位状态的独热码。
例如,有 6 个状态的独热码状态编码为:000001,000010,000100,001000,010000,100000。

5.2 优缺点

优点:状态比较时仅仅需要比较一个位,从而一定程度上简化了译码逻辑,译码简单,减少了毛刺产生的概率。
缺点:速度较慢,触发器资源占用较多,面积较大;

【基础知识】~ 进制转换、补码、格雷码、BCD码、独热码相关推荐

  1. 计算机基础知识 进制转换,计算机基础之进制转换详解

    进制转换是个老问题了,今天恰巧看见.我详细的去分析下它.留一笔吧 二进制的范围是(0-1), 不包含2 八进制的范围是(0-7) ,不包含8 十六进制的范围是(0-15) ,不包含16 先讲十进制-- ...

  2. 计算机系统基础知识——进制转换(二进制、八进制、十进制、十六进制)

    前言:计算机系统中常用的进位数制有二进制.八进制.十进制.十六进制,对于任何一种进位数制,其表示的数都可以写成按权展开的 多项式. 1. 十进制与二进制的相互转换 1.1 十进制转二进制   十进制数 ...

  3. 计算机应用基础进制转换说课稿,计算机应用基础信息技术基础《进制转换》教案.doc...

    计算机应用基础信息技术基础<进制转换>教案 "项目1-3 进制转换"教案 第 5-6 课时 课型: 理实一体化 授课时间:__9_月__ 24 _日 第_4 _周 星期 ...

  4. 【数字电路基础】进制转换:二进制、十进制、八进制、十六进制、反码、补码、原码

    文章目录 一.无符号数进制转换 1.1.十进制转二.八.十六 1.1.1. 十进制转二进制 1.1.2. 十进制转八进制 1.1.2. 十进制转十六进制 1.2.二.八.十六转十进制 1.3 二进制转 ...

  5. 基础知识——进制 与 进制转换 (C++ 程序)

    目录 一.进制的定义 二.表示方法 1.当进制数 ≤ 10时 2.当进制数>10时 三.进制的计算 1.整数 2.小数 3.非十进制数 4.非十进制转十进制 四.十进制转非十进制数 1.整数部分 ...

  6. 计算机进制转换a是什么,[计算机基础] 计算机进制转换:二进制、八进制、十进制、十六进制...

    计算机进制转换:二进制.八进制.十进制.十六进制 一.什么是进制 在生活中,我们通常都是使用阿拉伯数字计数的,也就是10进制,以10为单位,遇10进一,所以是由0,1,2.3.4.5.6.7.8.9组 ...

  7. 计算机基础(进制转换,计算机的认识,全是干货)

    1,计算机单位 ①8bit(位) ----1024Byte(字节)  ----1024KB(千字节) ----1024MB(兆) ----1024GB ----1024TB ②PB        EB ...

  8. Linux C基础02——进制转换和c语言简单介绍

    一,进制转换 其他进制转换到二进制: 10->2:除二取余 逆取法!小数部分乘积(2)取整,顺写法! 16->2: 一位转四位 0x放在首位,表示16进制,0x2F: 8->2: 一 ...

  9. 夯实基础——P2084 进制转换

    题目链接:https://www.luogu.org/problem/P2084 P2084 进制转换 题目背景 无 题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子 ...

  10. 任意进制转换成十进制间互化(ASCII码法)(C/C++)

    目录 1 最早的版本(C) 2  针对上面的问题进行改进(C++) 2.1  任意进制转换成十进制(运用字符串) 2.2  十进制转换成任意进制(运用数组逆序存储+取模作除法) 3  ASCII码参考 ...

最新文章

  1. C++类功能扩展预留五招
  2. Python--第4次平时作业
  3. protractor端到端测试简介
  4. android删除键监听,「React Native」Android返回键监听
  5. platform_device_add()函数分析
  6. 微信小程序项目笔记以及openId体验版获取问题
  7. oracle 传递table,将对象类型表从java传递到oracle 8i(Pass table of object type from java to oracle 8i)...
  8. Java 学习第一天
  9. 牛客练习赛26---未完
  10. SpringCound-Alibaba
  11. BPM管理系统解决方案
  12. 浅谈JdbcDaoSupport
  13. RNA-seq的典型流程(protocol)
  14. 小程序支持HTML标签
  15. 信息数据采集软件-什么工具可以快速收集信息
  16. Typora如何设置图片的位置更换保存路径
  17. 【Chips】VLSI Final Project:小型卷积核单元设计 项目总结
  18. 从零开始社区之路,手把手教你开源自己的Python包
  19. 收藏能力升级,支付宝版「小程序桌面」初现!
  20. 对话:与印度第一大IT教育培训公司CEO谈软件

热门文章

  1. 汇编 db,dw,dd的区别
  2. vue实现sha256加密
  3. TDengine 在中节能风力发电运维系统中的落地实践
  4. 详细讲解php快速排序,PHP快速排序算法使用步骤详解
  5. 证券市场红周刊丨六大关键词回望金融科技关键之年,2020再出发!
  6. Aspose.PDF轻量级的处理API,Aspose.PDF环境使用
  7. 打算以“航空航天青少年科普”为主题举办夏令营,写一份策划案。
  8. idea使用JRebel插件详解
  9. 标题关于Iview 设置Input 样式不显示无效的问题
  10. uniapp--动态设置input的type属性会使input样式失效