守幽 发表于 2021-11-9 09:58:46

怎么确定第一位是符号位

怎么确定第一位是符号位

村里小黑 发表于 2021-11-9 10:07:29

看你定义的数据类型是否有符号,例如int类型就带符号位,unsigned int 就不带符号位,你图片的二进制补码都是带符号位的,第一位就是符号位,正数和二进制原来值相同,负数符号位不变,数值按位取反加1

守幽 发表于 2021-11-9 10:08:59

村里小黑 发表于 2021-11-9 10:07
看你定义的数据类型是否有符号,例如int类型就带符号位,unsigned int 就不带符号位,你图片的二进制补码都 ...

补码就是带符号位,这样理解对吗

村里小黑 发表于 2021-11-9 10:12:23

守幽 发表于 2021-11-9 10:08
补码就是带符号位,这样理解对吗

对,第一位就是

守幽 发表于 2021-11-9 10:13:55

村里小黑 发表于 2021-11-9 10:12
对,第一位就是

好的,谢谢

jackz007 发表于 2021-11-9 15:02:57

本帖最后由 jackz007 于 2021-11-9 15:12 编辑

守幽 发表于 2021-11-9 10:08
补码就是带符号位,这样理解对吗

   一个数的补码是这个数取反然后加 1
1      : 0000 0001
1 取反   : 1111 1110
1 的补码 : 1111 1111

-1      : 1111 1111
-1 取反   : 0000 0000
-1 的补码 : 0000 0001

所以,1 和 -1 互为补码
      试试这个代码
#include <stdio.h>

int main(void)
{
      int d                                                                        ;
      for(;;) {
                scanf("%d" , & d)                                                    ;
                if(d == 0) break                                                   ;
                printf("【%d】的反码是:【%d】,补码是:【%d】\n" , d , ~ d , ~ d + 1) ;
      }
}
页: [1]
查看完整版本: 怎么确定第一位是符号位