原文:http://hi.baidu.com/magicdemon/blog/item/821b2e22d7df494cad34debd.html

C++下基本类型所占位数和取值范围:



符号属性      长度属性      基本型      所占位数      取值范围   输入符举例       输出符举例



--                    --           char          8          -2^7 ~ 2^7-1    %c         %c、%d、%u

signed            --           char          8          -2^7 ~ 2^7-1    %c         %c、%d、%u

unsigned        --           char          8          0 ~ 2^8-1       %c         %c、%d、%u



[signed]        short        [int]         16         -2^15 ~ 2^15-1               %hd

unsigned       short        [int]         16         0 ~ 2^16-1              %hu、%ho、%hx



[signed]          --            int          32         -2^31 ~ 2^31-1               %d

unsigned          --           [int]         32         0 ~ 2^32-1               %u、%o、%x



[signed]          long         [int]         32         -2^31 ~ 2^31-1               %ld

unsigned         long         [int]         32         0 ~ 2^32-1              %lu、%lo、%lx



[signed]         long long    [int]         64         -2^63 ~ 2^63-1              %I64d

unsigned       long long    [int]         64         0 ~ 2^64-1           %I64u、%I64o、%I64x



--             --           float         32        +/- 3.40282e+038          %f、%e、%g

--             --           double        64        +/- 1.79769e+308   %lf、%le、%lg    %f、%e、%g

--             long         double        96        +/- 1.79769e+308         %Lf、%Le、%Lg



几点说明:



1. 注意! 表中的每一行,代表一种基本类型。“[]”代表可省略。

    例如:char、signed char、unsigned char是三种互不相同的类型;

    int、short、long也是三种互不相同的类型。

    可以使用C++的函数重载特性进行验证,如:

    void Func(char ch) {}

    void Func(signed char ch) {}

    void Func(unsigned char ch) {}

    是三个不同的函数。



2. char/signed char/unsigned char型数据长度为1字节;

    char为有符号型,但与signed char是不同的类型。

    注意! 并不是所有编译器都这样处理,char型数据长度不一定为1字节,char也不一定为有符号型。



3. 将char/signed char转换为int时,会对最高符号位1进行扩展,从而造成运算问题。

    所以,如果要处理的数据中存在字节值大于127的情况,使用unsigned char较为妥当。

    程序中若涉及位运算,也应该使用unsigned型变量。



4. char/signed char/unsigned char输出时,使用格式符%c(按字符方式);

    或使用%d、%u、%x/%X、%o,按整数方式输出;

    输入时,应使用%c,若使用整数方式,Dev-C++会给出警告,不建议这样使用。



5. int的长度,是16位还是32位,与编译器字长有关。

    16位编译器(如TC使用的编译器)下,int为16位;32位编译器(如VC使用的编译器cl.exe)下,int为32位。



6. 整型数据可以使用%d(有符号10进制)、%o(无符号8进制)或%x/%X(无符号16进制)方式输入输出。

    而格式符%u,表示unsigned,即无符号10进制方式。



7. 整型前缀h表示short,l表示long。

    输入输出short/unsigned short时,不建议直接使用int的格式符%d/%u等,要加前缀h。

    这个习惯性错误,来源于TC。TC下,int的长度和默认符号属性,都与short一致,

    于是就把这两种类型当成是相同的,都用int方式进行输入输出。



8. 关于long long类型的输入输出:

    "%lld"和"%llu"是linux下gcc/g++用于long long int类型(64 bits)输入输出的格式符。

    而"%I64d"和"%I64u"则是Microsoft VC++库里用于输入输出__int64类型的格式说明。

    Dev-C++使用的编译器是Mingw32,Mingw32是x86-win32 gcc子项目之一,编译器核心还是linux下的gcc。

    进行函数参数类型检查的是在编译阶段,gcc编译器对格式字符串进行检查,显然它不认得"%I64d",

    所以将给出警告“unknown conversion type character `I' in format”。对于"%lld"和"%llu",gcc理所当然地接受了。

    Mingw32在编译期间使用gcc的规则检查语法,在连接和运行时使用的却是Microsoft库。

    这个库里的printf和scanf函数当然不认识linux gcc下"%lld"和"%llu",但对"%I64d"和"%I64u",它则是乐意接受,并能正常工作的。



9. 浮点型数据输入时可使用%f、%e/%E或%g/%G,scanf会根据输入数据形式,自动处理。

    输出时可使用%f(普通方式)、%e/%E(指数方式)或%g/%G(自动选择)。



10. 浮点参数压栈的规则:float(4 字节)类型扩展成double(8 字节)入栈。

     所以在输入时,需要区分float(%f)与double(%lf),而在输出时,用%f即可。

     printf函数将按照double型的规则对压入堆栈的float(已扩展成double)和double型数据进行输出。

     如果在输出时指定%lf格式符,gcc/mingw32编译器将给出一个警告。



11. Dev-C++(gcc/mingw32)可以选择float的长度,是否与double一致。



12. 前缀L表示long(double)。

     虽然long double比double长4个字节,但是表示的数值范围却是一样的。

     long double类型的长度、精度及表示范围与所使用的编译器、操作系统等有关。

C++下基本类型所占位数和取值范围的更多相关文章

  1. java基本类型(内置类型)取值范围

    例1: public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.pri ...

  2. jquery操作select下拉框的多种方法(选中,取值,赋值等)

    Query获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...}); //为Sel ...

  3. react 在IE9下input标签使用e.target.value取值失败

    在react项目开发中,input标签使用onChange方法获取输入值改变state: <input type="text" id="redeemNum" ...

  4. CentOS下Yum的$releasever和$basearch的取值

    CentOS下Yum源配置文件中如CentOS-Base.repo的$releasever和$basearch的取值 $releasever的值,这个表示当前系统的发行版本,可以通过如下命令查看: r ...

  5. angular select2 下拉单选和多选的取值赋值

    官网:http://select2.github.io/examples.html 兼容性: 引入文件 /select2.min.js /select2.min.css html <select ...

  6. (转载)linux下Yum的$releasever和$basearch的取值

    https://blog.csdn.net/whatday/article/details/51097456

  7. C#/Java/C/C++基本类型所占大小及表示范围

    C/C++的数据类型: 一,整型 Turbo C:   [signed] int 2Byte//有符号数,-32768~32767   unsigned int 2Byte //无符号数,只能表示整数 ...

  8. Linux下java进程CPU占用率高分析方法

    Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...

  9. “Options模式”下各种类型的Options对象是如何绑定的?

    “Options模式”下各种类型的Options对象是如何绑定的? 旨在生成Options对象的配置绑定实现在IConfiguration接口的扩展方法Bind上.配置绑定的目标类型可以是一个简单的基 ...

随机推荐

  1. WPF各种控件详解——(WPF从我炫系列)

    http://blog.csdn.net/zx13525079024/article/details/5694638

  2. WPF利用通过父控件属性来获得绑定数据源RelativeSource

    WPF利用通过父控件属性来获得绑定数据源RelativeSource   有时候我们不确定作为数据源的对象叫什么名字,但知道作为绑定源与UI布局有相对的关系,如下是一段XAML代码,说明多层布局控件中 ...

  3. FunnelWeb 开源Blog引擎介绍

    FunnelWeb is an open source blog engine, built by developers for developers. Instead of fancy quotes ...

  4. The import javax.servlet.jsp.JspWriter cannot be resolved' error

    Add servlet-api.jar and jsp-api.jar from Tomcat 6.0 library to ecipse project.

  5. 51nod 1272 思维/线段树

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1272 1272 最大距离 题目来源: Codility 基准时间限制:1 ...

  6. nginx默认语法

    vi /etc/nginx/nginx.conf user 设置nginx服务的系统使用用户worker_processes 工作进程数error_log nginx的错误日志pid nginx服务启 ...

  7. Eclipse插件开发_学习_02_GEF入门实例

    一.前言 这一节,我们将会创建一个GEF入门实例 二.新建RCP项目 1. New 一个 Plug-in Project 2.输入项目名 项目名:com.ray.gef.helloworld 3.Co ...

  8. codewar代码练习2——7级晋升6级

    7级晋升到6级的过程中以做6级题以及以前未完成的题目为主,一般选择算法题或者基础题.相比之前从8级升级7级(参见此博客:http://blog.csdn.net/m0_37324740/article ...

  9. 【集成学习】sklearn中xgboot模块中fit函数参数详解(fit model for train data)

    参数解释,后续补上. # -*- coding: utf-8 -*- """ ############################################## ...

  10. C/C++变量命名规则,个人习惯总结【转载】

    C_C++变量命名规则 原文地址:http://blog.sina.com.cn/s/blog_8a7012cf01017h9p.html 变量命名规则是为了增强代码的可读性和容易维护性.以下为C++ ...