C++ bool,char,short,int,long,float,double数据类型大小以及数据溢出值求解
来源:互联网 发布:淘宝免单群是怎么运作 编辑:程序博客网 时间:2024/05/29 04:05
以下讨论皆在32位编译环境下
类型 含义 字节数 取值范围
bool 布尔型 10,1
char 字符型 1 [-2^7, 2^7-1] (2^7 = 128)
wchar_t 宽字符2 [-2^15, 2^15-1] (2^15 = 32768)
short 短整型 2 [-2^15, 2^15-1] (2^15 = 32768)
int 整型 4 [-2^31, 2^31-1] (2^31 = 2147483648)
unsigned 无符号整型4 [0, 2^32 - 1] (2^32 = 4294967296)
long 长整型 4 [-2^31, 2^31-1] (2^31 = 2147483648)
float 单精度 4 [1.17 * 10^-38, 3.4 * 10^38] (这里只是正数范围内,负数范围对称过去)
long long 长整型8 [-2^63, 2^63-1] (2^63 = 9223372036854775808)
double 双精度 8 [2.225*10^-308, 1.797*10^308](这里只是正数范围内,负数范围对称过去)
小提示:float值一般能保证6位有效位数字,double一般保证10位有效数字
接着关于数据类型数值溢出情况的讨论:(以short类型为例)
short i = -32769; // 内存中实际值是i = 32767,如何得到?
short字节数为2,每个字节长度8bit,所以一个short类型使用16bit表示,一个bit即一个二进制的值,所以-32769的二进制是 (1)1000 0000 0000 0001,因为是负数(符号位,即最高位为1),负数在内存中以补码形式存储,原码到补码只需原码取反,再加1。这里由于最高位除了作为符号位外,还参与了数值表示,所以在取反时,最高位同样取反,最终得到0111 1111 1111 1111,转化为十进制即为32767
short i = 32769; //内存中实际的值是 i = -32767,如何得到?
32769的二进制是1000 0000 0000 0001,由于最高位是1,表示为负数,即该码为某负数的补码,补码到原码同样只需取反加1操作,取反时符号位保持不变,最终得到1111 1111 1111 1111,转化为十进制即为-32767
short i = 65537; //内存中实际值是i = 1,如何得到?
65537的二进制是 1 0000 0000 0000 0001,因为有一位超出了short的范围,超出的部分直接舍弃(从低往高存,存到16位就结束了,第17位完全没记录),所以内存中二进制是0000 0000 0000 0001,符号位为0,正数在内存中以原码存储,转化为十进制是1
short i = -65537; // 内存中实际值是 i = -1,如何得到?
对于超出short位数范围的负数,先不管符号,按照正数来,得到它的二进制,超出部分直接舍弃,剩下的部分存入内存,同时加入符号位,所以最终二进制是1000 0000 0000 0001,转化为十进制是-1
(感觉还是有问题。。。。)
阅读全文
0 0
- C++ bool,char,short,int,long,float,double数据类型大小以及数据溢出值求解
- c语言基本数据类型short、int、long、char、float、double
- c语言基本数据类型short、int、long、char、float、double
- c语言基本数据类型short、int、long、char、float、double
- c语言基本数据类型short、int、long、char、float、double
- c语言基本数据类型short、int、long、char、float、double
- char、short、int、long、char、float、double
- c语言基本数据类型(short、int、long、char、float、double)
- char short int long float double
- (JAVA & C)数据类型取值范围——short int long float double等
- 关于C和C++中的基本数据类型int、long、long long、float、double、char、string的大小及表示范围
- 关于C和C++中的基本数据类型int、long、long long、float、double、char、string的大小及表示范围
- c语言:输出以下关键字的字节大小及输出一个地址:char,short,int,float,double,long
- C/C++——求下面数据类型的最大值和最小值: char, short, int, long, float, double, long double和numeric_limits使用
- char short int long float double等字节大小基础信息
- 关键字分节3(基本数据类型-short、int、long、char、float、double)
- C/C++ 数据范围(int ,char long, float,double)
- short int、long、float、double
- C++ function templates(1)---《C++ Templates》
- axaj异步查询学习(多级联动、校对信息)
- ubuntu mysql5.7 改变数据目录
- Ajax实现动态刷新(Post)
- Failed to execute goal maven-javadoc-plugin-----在JDK8下maven-javadoc-plugin插件报错的问题
- C++ bool,char,short,int,long,float,double数据类型大小以及数据溢出值求解
- (HihoCoder
- python分类查询
- 构建高性能数据库缓存之redis主从复制
- 学习记录
- poj_1611_模拟递推_刚做过类似
- hello CSDN!
- 畅通工程
- codeforces Round 323D Once again(周期数列的最长非递减子序列)