主题:无符号数VS带符号数
foka
[专家分:200] 发布于 2007-10-11 20:39:00
请问:无符号数和有符号数在什么情况下使用呢?或者说怎么样才能知道某个数是无符号数还是带符号数呢?还是得分情况讨论呢??
回复列表 (共2个回复)
沙发
我是大喊三 [专家分:3010] 发布于 2007-10-15 01:47:00
我觉得吧,有符号数无符号数,在于看你怎么去看待它。象0xFFFF,如果你当它是无符号整数,它就是65535,如果是有符号数,它就是-1。就是说,对于最高位的“符号位”,你认不认它。在DEBUG里,输入MOV AX,-1和MOV AX,FFFFh这两条指令,可以看到最后汇编到内存里的二进制指令代码是一样的,都是0xB8FFFF。也就是说,至少到这步,有符无符是一样的。对于有符无符的处理的差异可以具体体现在汇编的一些转向指令(如JL),还有算术运算指令(如IMUL,IDIV)不同上面。这一般是编译器做的事。如:在C里定义一个数值变量默认就是有符号数,无符号数要加unsigned修饰符,编译器会自动按你定义的数据类型来运算。汇编就需要自己多操心一下了。另外存储在我们电脑里的负数,一般是以补码的形式存在的--就是“取反”、“加1”两个运算步骤的组合(CPU还有有专门求补指令NEG),所以-1就成了0xFFFF--据说此举是为了防止出现运算中出现“负零”的情况。这个“求补”过程编译器也为我们代劳了,所以也轮不到我们去操心。关于“补码”要详细的了解请自行搜索了。
板凳
bpttc [专家分:8790] 发布于 2007-10-16 13:01:00
同意
我来回复