double int char 数据类型

贴心的limits...

测试代码:

#include <iostream>
#include <stdio.h>
#include <limits>
#include <math.h>
using namespace std;

int main() {
    //double 最大精确到小数点后16位小数
    double test3 = 1.2345678912345678e17;
    printf("%.17lf\n", test3);

    test3 = 1.23456789123456789123e17;
    printf("%.17lf\n", test3);

    int a = (int)pow(2, 32);
    cout << "int 2^32: " <<  a << "===\n";

    int b = (int)pow(2, 64);
    cout << "long long to int: " << b << "===\n";

    long long c = (long long)pow(2, 64);
    cout << "long long 2^64: " << c << "===\n";

    cout << "type\t---" << "+++++++++++++++size+++++++++++++++\n";
    cout << "bool\t---" << "size:" << sizeof(bool) << "\tmax:" << (numeric_limits<bool>::max()) << "\t\tmin:" << numeric_limits<bool>::min() << endl;
    cout << "int\t---" << "size:" << sizeof(int) << "\tmax:" << (numeric_limits<int>::max()) << "\t\tmin:" << numeric_limits<int>::min() << endl;
    cout << "long long---" << "size:" << sizeof(long long) << "\tmax:" << (numeric_limits<long long>::max()) << "\t\tmin:" << numeric_limits<long long>::min() << endl;
    cout << "double\t---" << "size:" << sizeof(double) << "\tmax:" << (numeric_limits<double>::max()) << "\t\tmin:" << numeric_limits<double>::min() << endl;
    cout << "long\t---" << "size:" << sizeof(long) << "\tmax:" << (numeric_limits<long>::max()) << "\t\tmin:" << numeric_limits<long>::min() << endl;
}

运行:

其中:关于double

double就是IEEE754的64位浮点数
1位符号位
11位指数位
52位尾数位

即 精确到52位2进制位。
也就是说,精确到log(2^52)/log(10) = 15.6535597 位10进制位。

然后,float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,

由于它是不变的,故不能对精度造成影响。

所以,有效数字是15-16位,没有精确到小数点后几位之说。【大概是?T_T】

然后附偷来的详细一点的:

时间: 2024-11-10 10:57:39

double int char 数据类型的相关文章

Linux基本数据类型大小——int,char,long int,long long int

转自:http://paddy-w.iteye.com/blog/1403217 在Linux操作系统下使用GCC进行编程,目前一般的处理器为32位字宽,下面是/usr/include/limit.h文件对Linux下数据类型的限制及存储字节大小的说明.  /* We don't have #include_next.   Define ANSI <limits.h> for standard 32-bit words.  */     /* These assume 8-bit 'char'

在C语言中,double long unsigned int char 类型数据所占字节数

在C语言中,double  long  unsigned  int  char  类型数据所占字节数和机器字长及编译器有关系:所以,int,long int,short int的宽度都可能随编译器而异.但有下面几条原则(ANSI/ISO制订的): 1 sizeof(short int)<=sizeof(int) 2 sizeof(int)<=sizeof(long int) 3 short int至少应为16位(2字节) 4 long int至少应为32位. unsigned 是无符号的意思.

C++: string 转 int ;string转float;int 转string;double转char*

1.string转int std::string str1="700" int bid_v1 = atoi(str1.c_str()); 2.string转float std::string str2="6.78" float bid_p1 = atof(str2.c_str()); 3.int 转string int n =789; char t[256]; sprintf(t, "%d", n); string s(t) 4.double转c

C 语言实例 - 计算 int, float, double 和 char 字节大小。

使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小. sizeof 是 C 语言的一种单目操作符,如C语言的其他操作符++.--等,它并不是函数. sizeof 操作符以字节形式给出了其操作数的存储大小. #include <stdio.h>int main(){    int integerType;    float floatType;    double doubleType;    char charType;    // sizeof

java 中的 char 数据类型

java中的 char 数据类型使用 Unicode 编码,占用两个字节内存. 因为Unicode 采用无符号编码,一共可以存储 0x0000 ~ 0xffff 共65536 个字符, 而 int  是有符号4个字节,刚好一半是2个字节,所以在 java 将 char 看作整数(0-65535),于是我做了一个测试: //unicode 无符号编码 0x0000 ~ 0xffff (16进制)总共 可以表示 0-65535 for(int i =0 ;i<=65535;i++){ if(i%10

C语言下double转char*或者std::string,可以精确转换不含多余的0

char* GetDoubleStr(double value) { char buf[32]={0};//长度可以自定义 sprintf(buf,"%.8f",value);//保留8位小数,不够补0 int index = 0; int len = strlen(buf); for(int i = len-1;i>0;i--) { if(buf[i] == '0') continue; else { if(buf[i] == '.') index = i; else inde

C语言 将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数 函数原型:double my_atof(char *str)

编写一个函数,将一个数字字符串转换成这个字符串对应的数字(包括正浮点数.负浮点数) 例如:"12.34"  返回12.34 "-123.34" 返回-123.34 函数原型:doublemy_atof(char *str) 提示: 需要在函数中判断负号,小数点,还要判断是不是数字字符.在判断小数点时需定义一个计数器来计算小数点后数字字符的个数. #include <stdio.h> #include <math.h> double my_at

double my_atof(char *str)

编写一个函数,将一个数字字符串转换成这个字符串对应的数字(包括正浮点数.负浮点数) 例如:"12.34"   返回12.34" - 123.34" 返回 - 123.34函数原型:double my_atof(char *str) #include<stdio.h> #include<ctype.h> #include<cmath> double my_atof(char *str) { double ret = 0.0; int

C++中 int char 的相互转换

特别注意char 只能处理单个字符如,1,2,3到9等,不能接收11,11等多位数字 // 取到一个char的ASCII值 char c='A'; int i=c; printf("%d",i); //值为数字的char转为对应数字 char c1='3'; int c1int=c1-'0'; //int转为char型 int i2=4; char c2=i2+'0'; printf("%c",c2); 一个数(而不是一个数字) 如何转为char str[]呢? 代