永发信息网

C++中补码的最高位是符号位吗?设数位为8位,则-12的反码为10001100,最高位的1代表负数吗?

答案:1  悬赏:70  手机版
解决时间 2021-03-21 15:29
  • 提问者网友:轮囘Li巡影
  • 2021-03-21 01:23
C++中补码的最高位是符号位吗?设数位为8位,则-12的反码为10001100,最高位的1代表负数吗?
最佳答案
  • 五星知识达人网友:春色三分
  • 2021-03-21 01:47
1、首先纠正楼主的一个误区,补码跟什么编程语言无关,它是为了存储和计算方便而引入到计算机系统中的一种机制,它与计算机的存储结构有关。intel生产的x86架构的cpu有加法器,所以可以计算加法,但没有减法器这种机制,那就是不是就没有办法执行减法了呢?当然不是,比如我要计算2-1,可以先求出-1的补码,然后用2加上-1的补码就可以的到原结果的补码(计算机都是补码计算),在转换回来就是最终的结果。具体看后面。
2、于是你知道了为什么要引入补码,是为了方便表示负数。课本上告诉你了补码的计算方法:1)非负数的补码是其本身,2)负数的补码将除符号位之外的其他位取反加1,丢弃进位位,符号位为1不变。C++中的整数分为有符号和无符号两种,无符号数一定是非负数,所以其补码都是本身。有符号数的最高位是符号位,0表示整数,1表示负数,所以一个字节的有符号数能表示的范围是-128~127
3、一旦将原码表示为了补码,就不再有正负的区分了。就如你的例子,-12表示为一个字节的2进制是10001100,其补码为11110100(不是反码),此时就不再有正负的区分,它就是-12的补码,计算机就是这样存储它的了。但是当你想计算回原码的时候,它的最高位可以表示原码的是正数还是负数,如果是非负数,最高位一定为0,如果是负数,一定为1。现在把11110100转换回原码仍然是同样的做法:符号位不变,后面7位取反变为10001011,再加1变为10001100,不就是-12了吗。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯