C++ int 类型赋值 1e10

环境:Win7 x64,32G内存,8核,2.7GHz,VS2015

目标:C++ int赋值

测试

如上图所示: count1= 1e9时,count1 = 1 000 000 000;

                    count2=1e10时,count2 =1 410 065 408;

为什么 count2 != 10 000 000 000?

分析

VS2015下测试int占用4个字节,也就是32位,除了第一位代表符号,剩下的31位可用。

十进制的 1e10时,转换为二进制:10 0101 0100 0000 1011 1110 0100 0000 0000

而0101 0100 0000 1011 1110 0100 0000 0000 转换成十进制就是 1 410 065 408

百度搜了一下:

C/C++中int类型是32位的,范围是-2147483648 到 2147483647 

结论:使用int 变量时,一定注意范围。


拓展

C/C++ 规定 类型的范围区间为 -2的(n-1)次方 -----  2的(n-1)次方-1 

以字符char 为例,占用一个字节,那么它可以表示的区间就是 -128 --  127, 共256个数

那么问题来了,如果给char变量复制 128,会发生什么?调试结果char的值居然是 -128!

这里可以将值的变化当成进度条来看,

当值大于127时,会回到-128,然后继续向右走,也就是说:

128   ==  -128

129   ==  -127

130   ==  -126

.......

从而得到数值会在256个数上依次循环,而256就是2的8次方。

所以计算真实值时,按照以下步骤

1. 先求余数,X = X / (2的n次方)

2. 判断是否在值范围区间,比如 (-128,127), 在区间内,直接返回

3. 如果不在,正数 -  (2的n次方), 负数 + (2的n次方) 

 

二进制求值: 截断合适的位数,求值,然后通过上面步骤计算

值求二进制:

1. 先求余数,X = X / (2的n次方)

2. 如果是负数,负数 + (2的n次方) 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值