求负数补码的3种方法,为什么引用补码,用c语言实现

求负数补码的3种方法,为什么引用补码,用c语言实现求补码的方法正数没有争议就是原码等于补码和反码为什么引入补码求负数反码的两种方法正数没有争议就是原码等于补码和反码为什么引入补码数的原码表示百形式简单 适用于乘除运算 但用原码表示的数进行加减度法运算比较复杂 引知入补码之后 减法运算可以用加法来实现 且数的符号道位也可以当作数值一内样参与运算 因此在计算机中大都采用补码来进行加容减法运算引自 百度百科补码 模 概念的引入 负数补

正数没有争议就是原码等于补码和反码

为什么引入补码

数的原码表示百形式简单,适用于乘除运算,但用原码表示的数进行加减度法运算比较复杂,引知入补码之后,减法运算可以用加法来实现,且数的符号道位也可以当作数值一内样参与运算,因此在计算机中大都采用补码来进行加容减法运算
如:2 – 1 = 2 + (-1) 这样统一成加法,计算机底层设计可以只用加法运算器就可以实现+,-运算,设计越简单就可以加快处理得速度

求负数反码的两种方法

方法1:课本

负数的补码是在原码的基础上除符号位外其余位取反后+1

方法2:利用相反数减法求补码

“正数的补码,是其本身。 负数的补码,就用它的正数,减一取反,即可得到补码。

方法3:简化过程求补码

  1. 求出负数绝对值的原码
  2. 从原码的最后一位数码位往前数,当遇到第一个1时停在此位置
  3. 将第一个1前面的数码全部求反

方法三:c语言代码

以下代码求了-128 ~ -1的所有补码

/* 负数补码还原成原码是这样的: 1. 从补码的最后一位数码位往前数,遇到第一个1时停止 2. 将第一个1前的全部数码取反 3. 将第一个数码置1(原来肯定是0,因为我们这里只讨论负数的补码) 下面求-9 补码: 先减一:0000 1001 - 1 = 0000 1000; 1. 找到右边第一个1 再取反:1111 0111。 2. 1左边的数全部取反,右边的1因为减去了1变成0,取反后还是1,相当于不变 所以有:-9 补码 = 1111 0111。 3. 得到负数的补码 */ #include 
     #include 
     #include 
     #include 
     int arr[8]; //范围为 -128 ~ +127 void Complement(int number) //求负数补码 { 
    int number_0 = number; //记录当前负数  number=abs(number); //取绝对值 int i=7; while(number!=0) //求出其绝对值原码 { 
    arr[i]=number%2; // printf("arr[%d]=%d\n",i,arr[i]);  i--; // printf("number=%d\n",number);  number/=2; } for(i=7;i>=0;i--) { 
    if(arr[i]==1) { 
    int j; for(j=0;j<i;j++) //从右往左数,第一个1左边的数取反  if(arr[j]==1) arr[j]=0; else arr[j]=1; break; } } printf("%d\t=\t",number_0); for(i=0;i<=7;i++) printf("%d",arr[i]); printf("\n"); memset(arr,0,sizeof(arr)); //重置数组各项为0  } int main() { 
    int i; for(i=-128;i<=-1;i++) // 求 -128 ~ -1 的补码  Complement(i); return 0; } 

memset函数的使用

/* void *memset(void *str, int c, size_t n) 参数 str -- 指向要填充的内存块。 c -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。 n -- 要被设置为该值的字节数。 */ #include  
     #include  
     int main () { 
    char str[50]; strcpy(str,"This is string.h library function"); puts(str);//This is string.h library function memset(str,'0',7); puts(str);//0000000 string.h library function  return(0); } 

转自这位老哥:https://www.cnblogs.com/chiweiming/p/8932140.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228888.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午5:58
下一篇 2026年3月16日 下午5:58


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号