C语言求原码的补码问题

C语言求原码的补码问题,第1张

通过补码来求原码?

你以为补码原码是一一对应的吗?

八位补码,可代表带符号数-128~127。

八位原码,可代表带符号数-127~127。

由此可知,-128 只有补码,没有原码。

 

在八位补码中,0~127,是按照正数的原码来存放的。

另外的 128~255,则是代表数字-128~-1。

 将 129~255 “取反加一”,即为-127~-1 原码。

 而 128,没有对应的原码。

八位补码转成原码的程序如下:

unsigned char getbits(unsigned char value)

{ // value : 0~255

if (value == 128)  printf("此补码并无原码")

else  if (value >128) value = ~value + 1 + 128

//如果是负数,取反加一,并补上符号位,得到原码

return  value //返回原码

}

C语言中,所有的整型数据实际存储的都是补码。要计算补码,先要知道原码的概念,原码也就是一个10进制数的二进制表达方式,比如100的原码为1100100。

补码的计算原则为:

1、 对于无符号数以及有符号数中的正数,其补码就是原码本身;

2、 对于有符号数中的负数,其补码为真值绝对值的反码加一,其中反码为原码按位取反。

程序如下:

#include<stdio.h>

void main()

{

int a,b

char oper

scanf("%d%c%d",&a,&oper,&b)

switch(oper)

{

case '+':

printf("%d+%d=%d\n",a,b,a+b)

break

case '-':

printf("%d-%d=%d\n",a,b,a-b)

break

case '*':

printf("%d*%d=%d\n",a,b,a*b)

break

case '/':

printf("%d/%d=%f\n",a,b,(1.0*a)/b)

break

case '%':

printf("%d%%%d=%d\n",a,b,a%b)

break

default:

break

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11376574.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存