现在的位置: 首页 > web前端 > 正文

关于正数的补码是其本身

2020年07月15日 web前端 ⁄ 共 755字 ⁄ 字号 评论关闭

  正数的补码是其本身。这个是定义好的吗?还是通过运算可以证明?首先,整数的编码是先有最直观的非负数,然后再加上负数作为补充。补充负数的时候非负数的表达方法不能改变,这是很自然的。就如同硬件设计上都讲平稳退化一样。


  正数的补码问题


  其次,补码是完全的人为定义。正数的补码是其本身,这只是为了符合补码的设计原则:


  1.任何两个补码直接二进制简单相加,即可得到正确运算结果并仍是补码


  2.0不存在所谓“正0”和“负0”的二义性


  3.符合惯例和直观感受


  正数的补码实例


  在一本书上的一个输出数据的补码示例中:


  C/C++code


  ?


  intmain()


  {


  unsignedshortinta,b=1;


  printf("inputanoctalnumber:");


  scanf("%o",&a);


  b=a&0100000;


  if(b==0100000)


  a=~a+1;


  printf("result:%o\n",a);


  return0;


  }


  正数的补码为原码本身,负数的补码位整数的原码按位取反末位加1.


  输入:177777


  输出:result:1


  计算机中的所有数据都是由补码表示。


  由补码的定义,正数的补码是其本身,而无符号数(可以看成是一个正数)的补码就是他自己。。


  但无论正负,数在计算机中的表示都是以二进制的形式保存。无论你怎么操作,都是对二进制操作。


  LZ你的问题就是,对于一个正数,采用了负数补码的计算方式


  你要知道,177777的补码的真正定义是0177777。


  然后,lz用signed代替unsigned来测试一下程序。


  因为你声明的是无符号,在计算的时候的提升规则不同。


  总之,正数的补码给大家简单的介绍了一些,希望大家多看看。


  

抱歉!评论已关闭.