如何判断一个补码表示的是负数还是正数

swytcz201314 2010-04-06 09:49:05
例如 11111001
可以表示-7,好像也是正数的249
计算机是如何识别的?
...全文
2907 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fairywell 2010-04-07
  • 打赏
  • 举报
回复
内部只有二进制补码,没有任何意义,可以是整数,可以使浮点,可以是一段视频编码,可以是一段音乐
怎么解释它是读取它的程序的事情,比如 printf 用 %d 修饰符,就会认为如果二进制最高位为 1 就是负数,否则正数。
星光伴月 2010-04-07
  • 打赏
  • 举报
回复
是数据类型决定了它所对应的数据所在的内存的二进制串所表示的意义。
上面是挺拗口的一句话,仔细看看想想就明白了,呵呵。
赵4老师 2010-04-06
  • 打赏
  • 举报
回复
计算机只负责计算0和1;
人来负责解释这个计算代表啥意思。
andychinajj 2010-04-06
  • 打赏
  • 举报
回复
类型很重要的哦
chistopher 2010-04-06
  • 打赏
  • 举报
回复
一定要指定类型
qzf368 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
计算机不分正负,这个是要看你当成什么来用了。
[/Quote]
有道理!计算机才不管正负呢,只按二进制运算
xiuxianshen 2010-04-06
  • 打赏
  • 举报
回复
如果没有指定类型,估计计算机会出错的,呵呵
liao05050075 2010-04-06
  • 打赏
  • 举报
回复
这个要看你如何认定了。
如果定义为signed的话,那就是-7,如果定义为unsigned,那就是249
pengzhixi 2010-04-06
  • 打赏
  • 举报
回复
计算机不分正负,这个是要看你当成什么来用了。
a7182388 2010-04-06
  • 打赏
  • 举报
回复
计算机内部存储都是以1或0存储;

而最终的输出数据,是要看指令类型(数据的类型,比如int,unsigned,long,double等等);

就像你说的一样,上面的11111001,如果你不给系统该数据相应的解释指令的话,它是不知道该干什么的!!!
sanbailiushiliuye 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liao05050075 的回复:]
这个要看你如何认定了。
如果定义为signed的话,那就是-7,如果定义为unsigned,那就是249
[/Quote]

东大坡居士 2010-04-06
  • 打赏
  • 举报
回复
有符号位的第一位为符号位,无符号位的第一位也为表示具体的数字.
白云飘飘飘 2010-04-06
  • 打赏
  • 举报
回复 1
补码中正数最高位为0,负数最高位为1
kevinyujm 2010-04-06
  • 打赏
  • 举报
回复
1. 正负只有在你程序里面使用时才有实际意义,也就是逻辑上的意义,跟存储无关。
对于11111001,你的程序如果使用无符号数变量来存储,那说明你把它当249咯~

unsigned char a = 0xf9; //11111001 b
if (a < 0) //没意义

signed char b = 0xf9;
if (b < 0) //条件为真,b的确是负数

2. 计算机之所以采用补码的形式来存储数据,意义就在于使用补码后运算逻辑更简单,同时也决定了它在运算时无需区分正负。(编译软件在编译时会把所有数据都转化成2进制补码)
例如 -7+1=-6
11111001b + 00000001b = 11111010b
再如 7-1 = 6
00000111b + 11111111b = 00000110b
直接二进制位相加即可。
原码、反码都不能达到补码的效果。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧