计算机编码与浮点数
来源:互联网 发布:淘宝被扣48分保证金 编辑:程序博客网 时间:2024/04/30 12:33
数据的编码
数据表示当中的编码问题在计算机当中所使用的数据编码和我们日常生活中用到数据有一定的区别和差异这里我总结了下计算机当中所用到的几种编码其中就有,原码、反码、补码、移码。
源码如何计算得来呢? 就是我们把一个数转成二进制的表达形式,且把二进制的首位也就是最高位比如确定多少个字节来存这个数据如果是1个字节就是8个比特位,它的首位就是最高位最左边的一位,如果转成二进制不足8位王高位补0就可以了。
十进制 :1 原码二进制 就是 0000 0001 最高位为符号位,对于正数而言 符号位是0 ,对于负数而言符号位为1.
十进制 :-1 原码二进制就是 1000 0001 。。呵呵 我们发现有个问题 。
1 + (-1) 应该等于0的。但是用源码这样的操作往往行不通,变成二进制等于 1000 0010 变成了 -2的原码了。
所以像原码这种东西是不能够在计算机里面进行运算的。所以提出来了后面其他的编码方式、如反码
反码:也是区分正负的,对于正数:反码和源码表示是一样的。 包括后面的补码对于正数和源码也是完全相等的这一点 请大家一定要记住:原码、反码、补码 对于正数是一样的,负数就有差别。
十进制 :1 反码二进制是 :0000 0001 与源码一样最高位是符号位 0代表正数
反码对于负数:先把符号位单独处理 符号位不动 1 代表负数,然后把后面的所有位置按位取反(即这个位原来是0 改成1,是1改成0)。
十进制 :-1 反码二进制:1111 1110 最高位是符号位 1代表负数后面所有位按位取反。 。。。呵呵 我们发现
1 +(-1) 应该等于0。但是用反码 的结果是 0000 00001 +1111 1110 = 1111 1111 首先这是负数,然后其他位取反得到原始值 , 取反后等于 0, 结果计算出来的是负0 。 这已经跟我们的结果是匹配的了。但是看起来有些怪异,因为0 就是0 不应该分 正0 和负0。
补码 :上面说了 对于正数 原码、反码 、补码都一样,补码对于负数实在反码的基础上加1.这就是补码。下面单独说下负数的补码如下:
十进制: -1 补码二进制 : 1111 1111 负1 二进制最高是符号位 1 不动,其他位取反等于反码 然后再加1。
1+ (-1) 这时候计算机用补码相加:0000 0001 + 1111 1111 = 0000 0000 得到了8个0 正0 。这就符合了我们数学运算了。
移码:是在特定场合用到的,它用到在浮点运算当中的阶码,后面我专门说下浮点数。移码是如何产生的呢?
移码是在补码的基础上把首位做取反如 正数 1 : 补码 1 的二进制形式:0000 0001 移码 就把首位取反 1000 0001 。
同样 负1 :补码是 1111 1111 移码:0111 1111 。为什么要这么做呢?
原码、反码、补码的表示范围:
原码:
反码:
补码:
浮点数表示
Double float 等都是浮点数类型那么浮点数在计算机中的表示表示如下图:
其中M为尾数,e为指数,R为基数 。从公式可以看出尾数M 保证了精度。
如:1000 + 119 浮点数 计算方法如下
对阶 ====》 尾数计算 =====》 结果格式化
对阶就是指数需要相同,尾数才可以相加。怎么对阶呢?是把1000的指数划成10的2次方还是 119的指数化成10的2次方呢。如果把1000的指数划成10的2次方的话,那么就得把尾数变成 10.0 。虽然结果是对的但是根据经验来看 10.0+1.19 =11.19 ,结果格式化时候还得划成1.119 * 10的3次方,做了无用功 ,所以一般是从低的往高的对阶。
这样阶就对等了,这样尾数相加就可以了。
最后进行结果格式化
结果格式化是考虑到这个结果不符合浮点运算规则比方说我们结果是:
那么就得做结果格式化就得改成:就是说必须确保小数点左边位置不能是0,且只有1位数字。
,
- 计算机编码与浮点数
- 浮点数在计算机中的编码
- 计算机浮点数标准
- 计算机中的浮点数
- 浮点数的编码
- 浮点数在计算机中的表示法与IEEE754 (转)
- 计算机中浮点数的表示与IEEE 754
- 浮点数在计算机中的表示法与IEEE754
- 计算机浮点数 float 表示
- 计算机浮点数 float 表示
- 计算机浮点数 float 表示
- 计算机如何处理浮点数
- 计算机浮点数 float 表示
- 计算机浮点数 float 表示
- 计算机中的浮点数表示
- 计算机浮点数 float 表示
- 计算机的浮点数表示
- 计算机中浮点数存储
- Opencv+visual studio2017配置
- MyBatis--逆向工程
- Optane容量翻倍!价值何在?
- C++读bmp位图以及调用DLL方法
- mac执行git命令出现xcrun: error: invalid active developer path解决方法
- 计算机编码与浮点数
- UDP 打洞的一些整理
- Tomcat启动过程中,出现端口被占用的问题
- Ubuntu16.04 安装openjdk-7-jdk
- Shell脚本接收来自命令行传入的参数
- gunicorn工作原理
- 视频播放---jiecaovideoplayer的使用
- 英文在线ROS学习与开发网站推荐theconstructsim
- Apache shiro测试及其原理