二进制原码补码转换c语言源代码

作者&投稿:诗勤 (若有异议请与网页底部的电邮联系)
C语言,原码补码转换,-12345求其补码,求教!~

正数原、反、补码相同。
负数的原码、反码、补码不同。
以两个字节(16位)为例(short类型)来理解一下:
(-1)原=1000 0000 0000 0001 最高位为符号位1负,0正,数据总长度为16bits
(-1)反=1111 1111 1111 1110 原码除符号位外,逐位取反
(-1)补=1111 1111 1111 1111 反码+1
由此,我们来看-12345的补码:
(-12345)原=1011 0000 0011 1001
(-12345)反=1100 1111 1100 0110
(-12345)补=1100 1111 1100 0111

感觉你理解出错,是因为没有按字节来认识数据的存储,计算机中的数据最小存储单位为字节,一个字节占8位,一般情况下(32位机)数据的存储空间大小定义为:
char 1byte
short 2bytes
int 4bytes
long 4bytes
float 4bytes
double 8bytes
在C语言程序中,可以用sizeof命令来查看某类型的空间大小,如:printf("%d" , sizeof(long) );可以自己写程序测试一下你的机器。

换算方法如下:
1、数在计算机中是以二进制形式表示的。
2、数分为有符号数和无符号数,原码、反码、补码都是有符号定点数的表示方法。
3、一个有符号定点数的最高位为符号位,0是正,1是副;【原码】就是这个数本身的二进制形式。
4、正数的【反码】和补码都是和原码相同;负数的【反码】是将其原码除符号位之外的个位求反。

拓展资料1、C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
2、尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

#include <stdio.h>
int main()
{
char in[10], out[10];
scanf("%s", in);
if(strlen(in) < 8 || in[0] == 0) printf("%s
", in);
else
{
int i;
out[0] = '1' ;
for(i = 1; i < 8; i ++)
{
if(in[i] == '0')
out[i] = '1';
else out[i] = '0';
}
for(i = 7; i >0; i --)
{
if(out[i] == '0')
{
out[i] = '1';
break;
}
else out[i] = '0';
}
out[8] = 0;
printf("%s
", out);
}
}



C语言原码补码问题
而在计算机中数据都是以二进制补码进行存储的,那么-128的存储方式就是1000 0000,而它是没有原码和反码的,所以你不太能验证,对吧。这是因为在计算机中,为了溢出特意定义的一个小玩意儿~所以放到16来解释,它的最小值也是-32768。但这已经是最小的数了,再减就会溢出……(理论上是这样的)但是...

c语言中,原码补码反码都必须是二进制吗?
不需要,求补码是一种运算,参与运算的数值是整数就可以,不需要是二进制。但是计算机在内部处理的时候是转换成二进制进行处理的。C语言可以计算15的反码为-16,这个按照反码的定义是对的。代码如下:include <stdio.h> int main(void) { int a,b;a = 15;b = ~a;printf("b=%d\\n",b);retur...

C语言负数的补码怎么转换的?如-12345怎么转化为53191的
数在计算机中是以二进制形式表示的。数分为有符号数和无符号数。原码、反码、补码都是有符号定点数的表示方法。一个有符号定点数的最高位为符号位,0是正,1是副。以下都以8位整数为例,原码就是这个数本身的二进制形式。例如 1000001 就是-1 0000001 就是+1 正数的反码和补码都是和原码相同。...

C# 十六进制补码转换
FFDF 补码转换后应该是 0021 (十六进制) 你一定是看错了 转换方法和2进制一样, 反码+1 F对应反码是0 E <--> 1 D <--> 2 C <--> 3 依次类推 FFDF的反码是0020,再+1就是0021 0021的十进制是33,所以原数就是-33

C语言怎么求得一个32位数的原码,补码,反
你先解决 8 位数的吧。32 位数,都是一个道理。

C语言中二进制求补码过程中取反后再加1,那个1是怎么加的?跪求!_百度...
你说的14 是正数,不用进行取反再加1来计算其补码,它的补码就是00001110 c语言中,原码补码反码都必须是二进制吗? 不需要,求补码是一种运算,参与运算的数值是整数就可以,不需要是二进制。但是计算机在内部处理的时候是转换成二进制进行处理的。C语言可以计算15的反码为-16,这个按照反码的定义...

c\/c++ 二进制转化问题
以整形输出时,系统取出二进制码,由于char的类型的值是有符号的,最高位是符号位。所以输出时,把ch内存中的二进制码转换为源码 :11000001 最高位是1,表示负数,然后后面的七个二进制表示数值,64+1 = 65 。输出-65 楼主注意了:内存中的是补码,补码转换为源码,先把补码减一,然后除了最高位...

c语言中二进制补码问题
32767=2的15次方-1 = 01111111 11111111 你怎么得来的“原码是1100000000001001”??原码:人为规定的一种数据概念,最高位为符号位,其余位为数值位,实际应用中不用 反码:也是人为规定的数据概念,正数原码即是反码,负数反码:符号位不动,数值位按位取反,实际应用中不用 补码:计算机中实际存储...

C语言中unsigned和signed数据的转换
unsigned int e,f=12345;f是无符号 所以 f的 原码 补码是一样的:0000 0100 1101 0011 因此c还是等于12345 signed int c,d=-15;d是负数 所以 d的原码是1000 0000 0000 1111 d的补码是1111 1111 1111 0001 c = f = 0000 0100 1101 0011 转换成 十进制 就是 12345 e = d = ...

c语言-24转换为二进制补码是多少?
正数的补码就是本身,24的补码就是24的二进制码就是0001 1000

东辽县17840131561: 二进制原码补码转换c语言源代码 -
聂庾独圣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29#include <stdio.h> intmain() {charin[10], out[10];scanf("%s", in);if(strlen(in) < 8 || in[0] == 0) printf("%s\n", in);else{inti;out[0] = '1';for(i = 1; i < 8; i ++){if(...

东辽县17840131561: 如何用c语言/cpp 编译二进制补码和二进制转换程序? -
聂庾独圣: 如果给的是字符串的话先用这个程序转换成整型 char ch[33]; int i; int a = 0; scanf("%s",ch); printf("%s\n",ch); for(i=0;i<32;i++) { a = a | ((ch[i]-'0')<<32-1-i); } printf("%d\n",a); a就是转换后的数 剩下的就一样了#include <stdio.h>#include <string...

东辽县17840131561: 编程原码转补码 -
聂庾独圣: 1:我们来看一下补码的求得过程:将原码的各位取反,再加1,得到补码.举个例子,1001,它全部取反之后就是0110,再加1得到0111.将原码与补码加相,会得到10000.我们应该知道,计算机最基础的运算器只能做加法,所以叫累加器,...

东辽县17840131561: C语言求二进制补码 源代码 -
聂庾独圣: 一楼说的不对,由原码到补码,再由补码到原码应该都是取反+1,不存在-1的情况.1000,0000,0000,0000计算机会识别为负数(即先确定符号),接下来就是求其绝对值了,先取反0111,1111,1111,1111,再加1,得1000,0000,0000,0000,1后...

东辽县17840131561: C语言写一函数:给出一个数的原码,得到该数的补码 -
聂庾独圣: 0100000是八进制数.即二进制数:1000 0000 0000 0000.z=value&0100000;//意义就是取value的最高位.if(z==0100000)//如果最高位是1,即为负数,需要求补 z=~value+1;//求补,即取反+1 else z=value;

东辽县17840131561: 问下c语言的这个转换是怎么转换的啊? -
聂庾独圣: 数值的二进制表示方法为其补码,正数的补码和其源码相同,而负数则是将该值的绝对值的二进制按位取反再加1十进制229转换为二进制为:11100101,最高位为1,那么转换整数后为负数...

东辽县17840131561: C语言中,原码,补码和反码怎么换算?
聂庾独圣: 数在计算机中是以二进制形式表示的. 数分为有符号数和无符号数. 原码、反码、补码都是有符号定点数的表示方法. 一个有符号定点数的最高位为符号位,0是正,1是副. 以下都以8位整数为例, 原码就是这个数本身的二进制形式. 例如 ...

东辽县17840131561: c语言以二进制输出 -
聂庾独圣: #include#include void main(){ int number=43;char string[100]; itoa(number,string,2); printf("原数=%d 二进制数=%s\n",number,string); }这个可以满足你吗?让程序输出反码补码好像要求有点高.你根据我写的程序自己算一下反码补码并不是一件很难的事.

东辽县17840131561: 求数的补码 c语言中 -
聂庾独圣: 简单的位运算就可以了 #include void printBin(int num){ int i,k=31; for(i=0;i<32;i++){ printf("%d",(num>>k)&1);//移位并输出 k--; } printf("\n"); } int main(int argc, char* argv[]) { int num; printf("Please input a number, I will tell you what it really is:...

东辽县17840131561: c++补码转原码 -
聂庾独圣: 分两种情况,以八位原码转换为例: 正数(符号位为0的数)补码与原码相同. 负数(符号位为1的数)变为补码时符号位不变,其余各项取反,最后在末尾+1 例如:原码01100110,补码为:01100110 原码11100110,先变反码:10011001,...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网