黑马程序员技术交流社区
标题:
补码的三种求取方法小结
[打印本页]
作者:
刘艳伟
时间:
2012-11-15 10:33
标题:
补码的三种求取方法小结
本帖最后由 刘艳伟 于 2012-11-15 18:45 编辑
当将整型数据采用二进制表示时,正数用原码表示,负数用补码表示。最高位(左边的第一位)是符号位,用来区分正数或负数,正数使用原码表示,最高位是0,负数用补码表示,最高位是1。
如8的原码为:0000-0000 0000-0000 0000-0000 0000-1000
负数的补码有两种求取方法:
第一种:对其原码逐位取反(除符号位外),然后整个数加1
示例:
如求取-8的补码:
1、得到-8的原码:1000-0000 0000-0000 0000-0000 0000-1000
2、除符号位外逐位取反:1111-1111 1111-1111 1111-1111 1111-0111
3、加1既得-8的补码:1111-1111 1111-1111 1111-1111 1111-1000
第二种:求出绝对值比其小1的数的原码,然后逐位取反既得
示例:
如求取-8的补码:
1、比-8绝对值小1的数为7
2、7的原码为:0000-0000 0000-0000 0000-0000 0000-0111
3、将其逐位取反既得-8的补码:1111-1111 1111-1111 1111-1111 1111-1000
第三种:求出正数原码,将右边第一个1左边的所有位取反
示例:
如求-8的补码:
1、求出8的原码:0000-0000 0000-0000 0000-0000 0000-1000
2、从右边找到第一个1,将1左边的所有位取反,既得-8的补码:1111-1111 1111-1111 1111-1111 1111-1000
作者:
jerry2627
时间:
2012-11-15 11:12
- 8 & 0xff
作者:
欧阳亚嗣
时间:
2012-11-15 14:13
我在学C的时候了解到的求补码的方法觉得很简单。
从右往左找到第一个 1。除了第一个1,左边所有位取反。
9:
0000-0000 0000-0000 0000-0000 0000-1001
-9:1111-1111 1111-1111 1111-1111 1111-0111
是LZ 方法的懒汉式。囧rz!
作者:
刘艳伟
时间:
2012-11-15 18:46
欧阳亚嗣 发表于 2012-11-15 14:13
我在学C的时候了解到的求补码的方法觉得很简单。
从右往左找到第一个 1。除了第一个1,左边所有位取反。
9 ...
我试了一下,挺方便的,谢谢了,我已经将这种方法加到帖子中了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2