首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

数据在内存中的存储——整数

任意一个整数(当然是不能超过INT_MAX的一个数字),都是以2进制的表示方式存储的,表示方法有三种,分别为原码,反码,补码 而这三种方法都是既有符号位又有数值位的两个部分,符号位都是0来表示“正”,用1来表示“负”,最高的那位被当作是符号位,剩下来的31个bit全是数值位。 正数的三种表示形式都是相同的 而负数三种表示方式不同 原码:直接将数值按照正负数的形式,表示为二进制,就是原码 反码:将原码的符号位不改变,其余的按位取反。 补码:反码+1得到。 当然不管是正数还是负数,整数的存储存放的就是补码。 关于为什么要存放补码存贮,其实真正的原因是因为,使用补码,可以将符号位和数值域统一处理,同时加法和减法也可以统一处理,并且原码和补码的相互转换的处理过程是相同的,不需要额外的硬件电路(符号位不变,取反,+1)

01

寒假提升(6)[杂烩典型题]

这段代码的结果是什么呢? 首先关于char,存储的时候是是一个字节,意味着的是最高只能是2的7次方-1。为什么是7次方呢? 因为char是有符号的类型,符号位占了一个字节,也就还剩下127为最高,最小为-128。 此外,127和-128其实是连在一起的,意思是,对于char或者是别的一些有符号的类型也相当于是这样的,从0开始一直加1,能到127,在加上1就会变成-128,然后再加,最后又到0。 所以,a=101加上27,变成的是相当于-128,存储方式是1000 0000作为补码存储再内存中,符号位是1。但是在和int类型的sum进行计算时会整型提升(可以点进去看看,里面有相关介绍),此时由于最高位置是1,所以高位补1,然后再取反+1。为-128,所以sum+=a为sum=200-128=72。

01
领券