打印

一个菜鸟问题:怎么识别符号位?

[复制链接]
2158|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
superddt|  楼主 | 2008-11-8 11:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个问题一直郁闷着我,都说cpu用源码表示正数,补码表示负数。那假如我在声明一个变量时最高位为“1”了               (1000 0000)(-128),过一会去该地址提取变量,计算机怎么晓得是-128还是+128呢?
--------------------------
大家一定要知而相告啊!!!!!!!!!

为了大家看的不费力,我改过了

相关帖子

沙发
孤星119| | 2008-11-8 19:34 | 只看该作者

你定义的时候,肯定要申明是有还是无符号数.

使用特权

评论回复
板凳
superddt|  楼主 | 2008-11-9 09:25 | 只看该作者

还是不懂

谢谢LS的回答,可我还不明白啊
-------------------------------
如果我声明负数A(10000000)即-16,我声明了是有符号数,计算机怎么晓得?
莫非定义的时候,定义区别有无符号数总要有个定义标志位?这个位放哪?
如果这个位一直跟着A,那事实上每个字节就不止8位,而是9位了。
如果不跟着A,那下次取数的时候又怎么知道是有无符号数呢?
--------------------------------
我终于鼓起勇气问这个问题,希望大家帮帮新手啊!

使用特权

评论回复
地板
computer00| | 2008-11-9 09:38 | 只看该作者

1000 0000是-128,不是-16。如果是无符号,就是+128

计算机的处理跟你的处理一样的,同样是1000 0000,你怎么知道它是-128还是128呢?这就在于你把它当作什么数看待了。
计算机也是如此,把它当作有符号数时,就是-128,当做无符号数时,就是+128。
另外,还有一些不同的指令来针对是有符号数还是无符号数的运算,至于选择什么指令,
是由程序员决定的,也就是说,对于内存中存储的数据,当作有符号数还是无符号数来
看待,最终还是由程序员决定的。

使用特权

评论回复
5
iC921| | 2008-11-9 09:47 | 只看该作者

00还是举例说明

看看大米怎么煮成粥,怎么煮成米饭

使用特权

评论回复
6
superddt|  楼主 | 2008-11-9 10:51 | 只看该作者

谢谢00的回答

谢谢00那么详细的回答。但我天生愚笨,还望见谅。我再问 希望不要招至大家的反感啊
-----------------------------------
计算机的处理跟你的处理一样的,同样是1000 0000,你怎么知道它是-128还是128呢?这就在于你把它当作什么数看待了。
-----------------------------------
我也不知道1000 0000是多少,我没把它当任何数看待,但我声明了后再拿来运算、显示。如果我不加干涉,计算机就知道它是-128而不是+128,我真不明白这是为什么呢??-128和+128在内存中存储的样子是一样的。提取出来表示的就不一样了,我又没说什么,它怎么晓得我要哪个?在声明时它知道是有无符号数,可莫非它在每个字节都有标记不成?不然提取的时候又记得是不是符号数咧??

使用特权

评论回复
7
computer00| | 2008-11-9 11:17 | 只看该作者

定义就是这样的,-128就用1000 0000表示,这是它的补码

计算机也不知道1000 0000表示什么意思,它就把它当作1000 0000看待。
提取它的时候,结果都是1000 0000。至于什么时候表示-128,什么时候表示+128,
那就你自己决定了。当你看到1000 0000时,如果你认为它是一个有符号数,那么就是-128,
如果你认为它是一个无符号数,那么它就是+128。其实在计算机里面是同一个东西。
只是在显示的时候,由你自己决定显示成-128还是+128。

至于为什么用补码来表示,那是因为两个相反数相加的结果刚好为0。例如,+1用8bit的有符号表示就是0000 0001,
-1用8bit的有符号数表示就是1111 1111,两者加起来,结果就是1 0000 0000,只取低8位,结果刚好为0。
如果1111 1111你把它当作无符号的数看待,结果就是255。也就是说,-1和255实际上是同一个二进制值,
至于最终的结果表示-1还是255,是由你(程序员)决定的,计算机并不知道是-1还是255,它认为是同
一个东西。如果你要把1111 1111当作负数显示的话,只需要显示一个负号,然后把1111 1111减掉1,
得到了1111 1110,再按位取反,就得到了0000 0001,结果就是显示出-1了。

使用特权

评论回复
8
superddt|  楼主 | 2008-11-9 12:23 | 只看该作者

再次感谢00的详细回答

对我这样的菜鸟还能回答的那么详细,令我觉得没有被鄙视的感觉真的谢谢了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

0

粉丝