码迷,mamicode.com
首页 > 其他好文 > 详细

基础篇-整型转换

时间:2019-10-14 22:21:00      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:整型转换   参与   源码   最大   范围   基础   存储   字节   整形转换   

源码反码与补码

要理解整形转换规则,先要明白整形在计算机中存储形式。

原码

先说最简单的无符号整数。
[0000 0001]原 = 1
[1000 0001]原 = 129
对有符号数来说最高位是符号位,0表示正数,1表示负数。
[0000 0001]原 = 1
[1000 0001]原 = -1
所以int8的最大值表示不了129,下面都以有符号数为例。

反码

正数的反码与原码相同,负数的反码与原码的关系是:符号位不变,其他各位按位取反。
无符号位都是正数,略过不讲,这里只说有符号位数。
[0000 0001]原 = [0000 0001]反 = 1
[1000 0001]原 = [1111 1110]反 = -1
人脑需要把反码转换为对应的原码,才能计算出它实际的值。

补码

正数的补码与原码和反码都相同,负数的补码等于其反码加1
[0000 0001]原 = [0000 0001]反 = [0000 0001]补 = 1
[1000 0001]原 = [1111 1110]反 = [1111 1111]补 = -1
补码同样对人脑不友好,需要转换到对应的原码,才能计算出实际值。

引入补码的原因

补码对人并不直观,引入补码的原因是为了简化计算。加法作为最基础的运算,设计的越简单越好。引入补码后,符号位可以直接参与运算,不用额外记忆,可以把减法转换为减法。
以-1-1为例,-1-1 = -1 + (-1)
[1000 0001]原 + [1000 0001]原 = [1111 1111]补 + [1111 1111]补 = [1 1111 1110]补 = [1 0000 0010]原 = -2

整形转换

由小字节整型向大字节整型转换很直观,说下大范围的整型向小范围整型转换的情况
-129 = [1 1000 0001]原 = [1 0111 1110]反 = [1 0111 1111]补
将-129转为int8,值能保留8位,舍去最高的符号位,剩下的是[0111 1111]为正数,补码与原码相同,值为127

基础篇-整型转换

标签:整型转换   参与   源码   最大   范围   基础   存储   字节   整形转换   

原文地址:https://www.cnblogs.com/progyoung/p/11674543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!