浅析补码
2016-08-27 15:39
441 查看
计算机为了表达正负整数,把最高位单独拿出来,0代表正、1代表负,于是乎为了简化符号位带来的运算复杂,出现了补码。
理解补码必须首先理解模:
1)前提:表达整数的最小绝对值为0;
2)钟表的表盘分成12等分,把12点看做0点,时针所在的位置总共有12种情况(0~11),12就是模。
3)8位数可以表达二进制为0000 0000~1111 1111(即十进制的0~255)的数值,也就是二进制1 0000 0000(即十进制的256)种可能性,256就是8位数的模;
负数的补码=模-负数的绝对值
1)单从钟表时针的位置而言,从12点位置往前拨6格是6点位置(0 + 6 = 6),往后拨6格还是6点位置(0 - 6 = 6),是因为0 - 6 = 0 + (-6) = 0 + (12 - |-6|) = 0 + (12 - 6) = 0 + 6 = 6;
2)对8位整型而言,以二进制表示:
负数=1 0000 0000 - 负数的绝对值 =
1 + 1111 1111 - 负数的绝对值 =
1 + (1111 1111
- 负数的绝对值)= 1 +
(负数的绝对值按位取反)
其实课本上说的把负数的绝对值取反再加上1就是这个意思。
这样可以得到几个负数的补码:
-128 = 256 - |-128| = 256 - 128 = 128,即2进制的1000 0000;
-1 = 256 - |-1| = 255,即2进制的1111 1111。
理解补码必须首先理解模:
1)前提:表达整数的最小绝对值为0;
2)钟表的表盘分成12等分,把12点看做0点,时针所在的位置总共有12种情况(0~11),12就是模。
3)8位数可以表达二进制为0000 0000~1111 1111(即十进制的0~255)的数值,也就是二进制1 0000 0000(即十进制的256)种可能性,256就是8位数的模;
负数的补码=模-负数的绝对值
1)单从钟表时针的位置而言,从12点位置往前拨6格是6点位置(0 + 6 = 6),往后拨6格还是6点位置(0 - 6 = 6),是因为0 - 6 = 0 + (-6) = 0 + (12 - |-6|) = 0 + (12 - 6) = 0 + 6 = 6;
2)对8位整型而言,以二进制表示:
负数=1 0000 0000 - 负数的绝对值 =
1 + 1111 1111 - 负数的绝对值 =
1 + (1111 1111
- 负数的绝对值)= 1 +
(负数的绝对值按位取反)
其实课本上说的把负数的绝对值取反再加上1就是这个意思。
这样可以得到几个负数的补码:
-128 = 256 - |-128| = 256 - 128 = 128,即2进制的1000 0000;
-1 = 256 - |-1| = 255,即2进制的1111 1111。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c#调用COM组件
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Linux C函数参考手册(PDF版)
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦