C语言中二进制求补码过程中取反后再加1,那个1是怎么加的?

作者&投稿:地阎 (若有异议请与网页底部的电邮联系)
在计算机C语言中,求补码口诀为“求反加一”是怎么回事?~

对二进制数取反,即0变1,1变0;取反后再加上1,就能求出补码。比如十进制数10的二进制原码是1010,要求它的补码,就是先对其取反,变成0101,再加1,满二进位,变成0110,就是它的补码表示形式。

二进制运算当然是在二进制数字间的运算。正数的补码等于原码,负数的补码就是取反加一(符号位不动)。举个“栗子”:\x0d\x0a求-7的补码。\x0d\x0a因为给定数是负数,则符号位为“1”。\x0d\x0a后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001 加在末尾了),所以-7的补码是11111001。\x0d\x0a\x0d\x0a如果末位为1,加1后要进位,即‘10’。二进制只有0和1,不会出现‘2’的。

二进制运算当然是在二进制数字间的运算。正数的补码等于原码,负数的补码就是取反加一(符号位不动)。举个“栗子”:\x0d\x0a求-7的补码。\x0d\x0a因为给定数是负数,则符号位为“1”。\x0d\x0a后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001 加在末尾了),所以-7的补码是11111001。\x0d\x0a\x0d\x0a如果末位为1,加1后要进位,即‘10’。二进制只有0和1,不会出现‘2’的。

二进制运算当然是在二进制数字间的运算。正数的补码等于原码,负数的补码就是取反加一(符号位不动)。举个“栗子”:
求-7的补码。
因为给定数是负数,则符号位为“1”。
后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001 加在末尾了),所以-7的补码是11111001。

如果末位为1,加1后要进位,即‘10’。二进制只有0和1,不会出现‘2’的。

取反加一,并不是补码的定义。

补码的来源,并不是什么原码反码符号位以及取反加一。

补码,其实,是一个“代替负数运算的”的正数。

借助于补码,减法,就可以用加法代替。

利用补码,统一了加减法,目的是简化计算机的硬件。

--------------------------

为什么正数(补码)能够代替负数呢?

用十进制来说明,比较容易理解。

如果限定【仅用 2 位 10 进制数】,可以有:

  24 - 1 = 23

  24 + 99 = (一百) 23

保留 2 位数,就必须舍弃进位。

此时,+99 就和-1 是等效的。

+99,就称为-1 的补数。

+98,是-2 的补数。

。。。

如果,使用 3 位 10 进制数,-1 的补数,就是+999 了。

求补数的公式:

  补数 = 负数 + 10^n, n 是位数。

--------------------------

计算机使用 2 进制,补数,就改称为:补码。

8 位 2 进制的范围:0000 0000~1111 1111 (十进制 255)。

共有 2^8 = 256 组。

此时,-1 的补码,就是 255 (1111 1111)。

同理,-2 的补码是 254 (1111 1110)。

求补码的公式:

  补码 = 负数 + 2^n, n 是位数。

只有负数,才需要用补码替换。

正数,不存在变换成补码的问题。

在 256 组二进制中,用 128 组来代替负数:-1~-128。

-1 的补码是:-1 + 2^8 = 255 = 1111 1111。

。。。

-128 的补码是:-128 + 256 = 128 = 1000 0000。 

以上,就是【补码的来源,以及意义】。

--------------------------

为什么是“取反加一”?

由求补码的公式: 补码 = 负数 + 2^n,

就可以推出“绝对值取反加一”的简便方法。

注意:这里只是说到“绝对值”,并不是用“原码反码符号位”的说法。

原码反码符号位,都没有任何理论依据,都是无稽之谈。




二进制补码计算?
一分钟了解计算机与二进制

C语言求二进制补码 源代码
输入任意整数,输出32位的补码。输入其他,结束程序。include<stdio.h> int main(){ int i,num=0;char s[33]={0};while(1==scanf("%d",&num)){ for(i=0;i<32;i++){ s[i]= (0x01 & (num>>(31-i))) ? '1' : '0' ;} printf("%s\\n",s);} return 0;} ...

二进制数 原码为101011,它的反码和补码是?怎么求
如原码:11010100 --- 从右往左数,第一位是0,不理它,第二位还是0不理它,第三位是1,那么从此以后的每位取反,即为它的补码了。 答案为:10101100 看懂了吗?你的题目:101011 (求补码) 从右往左数,第一位是1,那么,以后每位都取反,来吧,跟我来,倒数第一位是1,倒...

正数的二进制补码是什么,原码又是什么?
[+0]反码=0000 0000, [-0]反码=1111 1111 [+0]补码=0000 0000, [-0]补码=0000 0000 补码没有正0与负0之分。正数的反码、补码和其源码相同,负数的反码是其源码,除符号位外其他位取反负数的补码是取其反码后加1。详细释义:所谓原码就是二进制定点表示法,即最高位为符号位,“0...

求二进制补码形式
72用二进制表示就是 0100 1000,那么-72的原码就是1100 1000,再求反码,即 1011 0111,反码加1就是补码,即 1011 1000.同理,-76原码 1100 1100,反码 1011 0011,补码 1011 0100 在此说明一下,负数的原码就是最高位为1,正数最高位是为0。反码就是最高位不变,其他位进行求反。补码等于...

计算机中的补码是如何表示的?
保证补码规则是反码整体加一)。所以,补码能表示的数的个数中,比原码反码少了一个,所以补码可以多表示一个真值为-128的数。但是,多表示的这个数-128比较特殊,只有原码和补码,没有反码。-128的补码是1000 0000。128的补码为什么是1000 0000。因为8位二进制的原值表达范围为:-127至127,共有256...

已知二进制数10110010求补码表示?
反码:11001101 补码:11001110(反码+1)记住是最高位是符号位!

在C语言中补码什么意思?
比如11111111+1=1 00000000,其中进位1被丢弃,结果是0。补码规则中的正数的补码是自身,这样计算机中的整数就都是用补码表示的了。求补码的方法很多,其中常见的是所谓“反码+1"法,即把负整数对应的正整数的二进制编码的各位取反,再加正整数1,而字长的最高位固定置1而得到这个负数的补码。

8位二进制补码
这也解释了为什么127(0111 1111)+1(0000 0001)=-128(1000 0000)。在计算机中数据用补码表示,利用补码统一了符号位与数值位的运算,同时解决了+0、-0问题,将空出的二进制原码1000 0000表示为-128,这也符合身逻辑意义的完整性。因此八位二进制数表示范围为-128~+127。

c语言中-8的八位二进制补码是多少?
8的二进制码:1000 8的8位二进制码:0000 1000 反码:1111 0111 加1:1111 1000 得到的就是-8的8位二进制补码:1111 1000 有什么问题请留言。

城中区13071707745: C语言中二进制求补码过程中取反后再加1,那个1是怎么加的?跪求! -
仝呢巴特: 二进制运算当然是在二进制数字间的运算.正数的补码等于原码,负数的补码就是取反加一(符号位不动).举个“栗子”: 求-7的补码. 因为给定数是负数,则符号位为“1”. 后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001 加在末尾了),所以-7的补码是11111001.如果末位为1,加1后要进位,即'10'.二进制只有0和1,不会出现'2'的.

城中区13071707745: C语言中负数的补码怎么求比如 - 9,怎么求的,现在我知道正数补码最高位0,负数最高位为1,先求原码的反码,再把反码加1,能把 - 9的补码过程给我演算一... -
仝呢巴特:[答案] 八位二进制 9是00001001 逐位取反 11110110 加一 11110111 加符号位 111110111

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

城中区13071707745: C语言中"按位与"&运算中如果是两个负数,先取反“与”,所得的结果是否要写成原码? -
仝呢巴特: 不是, 如果对无符号型,都是用原码表示.而对有符号型,计算机首先将你写的10进制,转换成2进制,然后将2进制(即原码)取反,变成反码,最后反码再加1,得补码.用补码形式进行逻辑运算或者算术运算. 哦,对有符号型数据,计算机是以补码的形式进行映射.即编码.简单说就是一个补码对应一个数字.所以对负数,计算机也是将结果通过补码的形式,写入显存,从而显示出来的. 如果您还有什么问题,可以问我的勒~

城中区13071707745: C语言中一个数补码和原码是如何进行计算的?
仝呢巴特: 原码不论正负都是一样的,第一位是符号位,正数为0,负数为1,后面就是该数的二进制数 正数的反码和补码都与原码一样不变 负数的反码是除符号位外每位都取反 补码是反码的基础上加1

城中区13071707745: 在c语言中,无符号的数需要取反加一吗? -
仝呢巴特: 在c语言中,数值是以补码表示的: 正数的补码和原码相同; 负数的补码:将该数的绝对值的二进制形式按位取反再加1.1、计算机存储数据是以二进制的补码形式来存储的,正数的补码是它本身(如:有二进制00000110,因为他的第一位是0,即代表是正数,反码、补码就是它本身).2、负数的补码是它的反码加1,也就是你说的'取反加一'(如:有二进制10000110,第一位是1,代表它是负数,反码就是每一位都取反,为01111001,所以,补码就是01111010).

城中区13071707745: C语言的编程题,寻求高手解答
仝呢巴特: c=-1 d=255 计算机中的数据都是以补码形式存储,补码以最高位(符号位)1表示负,以0表示正,并且定义10000000=-128(这是一种约定,否则10000000应该等于-0) 如果你知道补码和原码是如何转化的,那么下面引号里的可以不看"数...

城中区13071707745: C语言中,如何求一个数的二进制补码?举个例子,谢谢! -
仝呢巴特: 正数的补码是其原值 例如占一个字节的10,二进制为0 000 1010, 第一位0表示+,补码也是0 000 1010 负数的话-10, 二进制为1 000 1010, 第一位1 表示-,补码求法为 :符号位不变,其余取反再加11 000 1010 取反 1 111 0101 再加1: 1 111 0110

城中区13071707745: 二进制补码怎么算? -
仝呢巴特: 1、在计算机系统中,数值一律用补码来表示(存储). 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理.另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃. 2、补码与原...

城中区13071707745: 学反码、补码、原码 -
仝呢巴特: 你是在学C语言吧 其实这几种码制转换不用买什么书的, 多看几次c语言的书,多记几个相关的例子就可以了, 下面是一些资料,多看几遍就行:1、在计算机系统中,数值一律用补码来表示(存储). 主要原因:使用补码,可以将符号...

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