永发信息网

C语言2的取反为什么是-3,怎么算的?正数的原码反码不是不变吗??

答案:3  悬赏:40  手机版
解决时间 2021-02-22 09:26
  • 提问者网友:箛茗
  • 2021-02-21 19:57
C语言2的取反为什么是-3,怎么算的?正数的原码反码不是不变吗??
最佳答案
  • 五星知识达人网友:人類模型
  • 2021-02-21 21:03
假设2以一个字节存储,则其补码为:00000010(正数的原码和补码是一样的),则取反后得到11111101这么一个补码,将这个补码转换成原码得到的结果就是-3了。转换过程如下:
11111101--将该数减1求反码得 11111100--除符号位外每位取反求原码得10000011,最高位表示符号位
全部回答
  • 1楼网友:轮獄道
  • 2021-02-21 22:47
取反是一种运算,而你说的原码反码补码是数字的表示方法,是两个不同的概念,十进制的2用二进制表示原码是0000 0010 补码0000 0010,而对十进制的2取反就是取反不是说变成反码。 数字在计算机里是以补码的形式存储,2在计算机里是00000010,取反就是谁说的正数的反码不变。通常来说,是正数没得反码和补码这一说,因为正数的编码都是原码,也就不存在正数的反码。将正数取反得到的结果是完全的另一个数。 数字编码方式无论哪种编码,都是为了代表一个数并且便于运算。我甚至可以指定00000001来代表数学上的2,00000010来代表5。我可以任意做影射关系,就像ASCII码一样,你说凭什么13就代表换行,10代表回车,我用5代表回车就不行?答案是当然行,如果你够牛,能改变标准就行。说白了就是一个影射而已,我想怎么影射都可以,只是前人已经制定了那样的标准,我们学习的时候,要试图去理解,前人为什么呀要那样制定标准,好处是什么。
  • 2楼网友:归鹤鸣
  • 2021-02-21 22:14
计算机内不是用原码表示的,它是用“补码”表示的 正数的反码=原码=补码,不等于按位取反。C语言内部的取反也不是“反码”。反码的定义是针对负数的,负数反码表示:1,符号位为1,2。除了符号位之外按位取反等于它的相反数。可见它和C语言的取反也不一样
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯