A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘艳伟 中级黑马   /  2012-11-15 10:33  /  3407 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘艳伟 于 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

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
- 8 & 0xff
回复 使用道具 举报
我在学C的时候了解到的求补码的方法觉得很简单。
从右往左找到第一个 1。除了第一个1,左边所有位取反。
9:
0000-0000 0000-0000 0000-0000 0000-1001
-9:1111-1111 1111-1111 1111-1111 1111-0111
是LZ 方法的懒汉式。囧rz!

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
欧阳亚嗣 发表于 2012-11-15 14:13
我在学C的时候了解到的求补码的方法觉得很简单。
从右往左找到第一个 1。除了第一个1,左边所有位取反。
9 ...

我试了一下,挺方便的,谢谢了,我已经将这种方法加到帖子中了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马