3、变量、内存、指针

不同类型的变量对应不同类型的存储方式,例如

哪个位数有2 ,哪个位就划1,举例 9.125

9.125  =1*2^3 + 0*2^2 + 0*2^1 + 1*2 ^0+ 0*2^(-1)+ 0*2^(-2)+ 1*2^(-3),用二进制表示:1001.001

用二进制形式科学计数法(数字在内存中以二进制科学计数法的表示)表示:1.001001*2^3

则float的存储步骤如下:

符号部分:为0

指数部分:指数为3,则:3+127=130,130用二进制表示为10000010

尾数部分:就是二进制的小数部分,001001,小数部分的有效数字后面有多少个0都不会影响结果,因此对应的尾数部分0即可

注意,float与double的存储方式类似,只是存储的位数不同,(指数部分不同:float偏置量为127,double偏置量为1023)在原理上一样

当c++赋值了一个变量,这个变量就已经分配了内存,里面装的是这个变量值的二进制形式,当使用指针读取内存时,指针的类型决定了读取的内存的大小和方式,例如int类型和double类型的读取方式不同,所占内存也不同,例

变量被定以后(例如:int a;)地址就已经确定,但是读取方式不同,但是不管什么类型的指针指向该变量,得到的地址都不会变,都是该变量本身的地址

int的读取方式与double不同(double与float类似),例:

float a=10,10=1*2^3+0*2^2+1*2^1+0*2^0,则:

其二进制形式1010,按照float类型存储(float形式是 符号+指数+尾数),如下:

1010=1.01*2^3,(因为是二进制,所以是2的3次方)

符号部分:0,

指数部分:10000010(指数部分:指数(本例中为3)+偏置量,再化成二进制),

尾数部分:01(二进制科学计数法形式中的小数部分),在后面补零

则float内存中的10被存储为0100 0001 0010 0000 0000 0000 0000 0000

使用int类型读取,则为1*2^30+1*2^24+1*2^21=1092616192

int类型存储方式:补码存储形式

1、正数的补码和原码相同,即先转换为二进制,然后高位扩展0,一直填充至32位

2、负数补码计算方式为取绝对值的二进制,按位取反再加1,例如-5,

先取绝对值,即5,即 00000000 00000000 00000000 00000101

然后按位取反:       11111111 11111111 11111111 11111010

再加1:即           11111111 11111111 11111111 11111011

原码反码补码举例:

[+1] = [00000001](原码) = [00000001](反码) = [00000001](补码)

[- 1] = [10000001](原码) = [11111110 ](反码) = [11111111](补码)

int16位时)的范围(-2^15~2^15-1)的正数上限0111 1111 1111,等于

2^14+2^13+2^12+2^11+2^10+2^9+2^8+2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0=2^15-1

一共16位,从0开始,最高位为15,最高位存储正负号,因此int的最大值是从0~14位皆为1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值