版权声明:本文为博主原创文章,未经博主允许不得转载。

  为什么int类型的取值范围会是-2^31 ~ 2^31-1  ,为什么要减一呢?

计算机里规定,8位二进制为一个字节,拿byte来说,一个BYTE类型的数据是占1BYTE(字节)的,那么他的取值范围为:00000000~11111111转换成10进制就是0到255,同样一个2BYTE的short int类型,他可装的为16位二进制即:0000000000000000~1111111111111111,也就是10进制的0~65535但是short类型他是有正负之分的,那么怎么表示负数呢?就是判断最高位,当最高位为0则为正,为1则为负。即:1000000010110001就是一个负数。其他的以此类推……

 
这个1是代表0这个数的个数,因为0为1吗,且0的int类型表示为32个0,第一个0代表为表示正负号,所以0可以看成是正数的一个特例。
 
基本类型包括字节型(char)、整型(int)和浮点型(float/double)。
    定义基本类型变量时,可以使用符号属性signed、unsigned(对于char、int),和长度属性short、long(对于int、double)对变量的取值区间和精度进行说明。
    下面列举了Dev-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
位。

 

C语言数据类型取值范围解析的更多相关文章

  1. C语言数据类型取值范围

    一.获取数据类型在系统中的位数 在不同的系统中,数据类型的字节数(bytes)不同,位数(bits)也有所不同,那么对应的取值范围也就有了很大的不同,那我们怎么知道你当前的系统中C语言的某个数据类型的 ...

  2. C语言中数据类型取值范围的计算的理解与总结

    c语言中,数据类型有short,int,long,char,float,double,然后除了浮点型只有 有符号数(signed)外,其他的数据类型都分为有符号(signed)和无符号(unsigne ...

  3. java基本数据类型取值范围

    在JAVA中一共有八种基本数据类型,他们分别是 byte.short.int.long.float.double.char.boolean 整型 其中byte.short.int.long都是表示整数 ...

  4. Java进阶(十一)部分数据类型取值范围

    java整型byte,short,int,long取值范围大小 在项目开发中,需要用到随机数的生成方法,代码如下: public static String randomizeNumber(int n ...

  5. SQL 用于各种数据库的数据类型(转载) sqlserver 数据类型 取值范围 长度

    SQL 用于各种数据库的数据类型 来源 http://www.runoob.com/sql/sql-datatypes.html    面向数据库编程中,数据类型的取值范围.长度,可能是需要经常查看的 ...

  6. java数据类型取值范围

    1个字节:boolean, byte 2个字节:short, char 4个字节:int, float 8个字节:long, double 按照我们初学者的理解1byte=8bit,也就是说1个字节可 ...

  7. C语言各种数据类型取值范围

    速查表: char -128 ~ +127 1Byte -2^7 ~ 2^7-1 unsigned char 0 ~ 255 1Byte 0 ~ 2^8-1 short -32767 ~ + 3276 ...

  8. 学习笔记28—Python 不同数据类型取值方法

    1.array数据类型 1)-------> y[i,] 或者 y[i] 2.遍历目录下所有文件夹: def eachFile(filepath):     pathDir =  os.list ...

  9. Jquery的text()和html()方法在li与div取值结果解析

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 阅读笔记——Web应用程序

    Web应用程序与DD文件 Web应用程序 web应用程序是一种可以通过Web访问的应用程序.Web应用程序最大的好处是永和很容易访问应用程序.用户只需要有浏览器即可,不需要安装其他任何软件.一个Web ...

  2. [python]-类与对象-上

    [类]是一个函数包.类中可以放置函数和变量,然后类中的函数可以很方便的使用类中的变量 1.类的定义 2.类中方法的调用 在类中被定义的函数被称为类的[方法],描述的是这个类能做什么.我们使用类名.函数 ...

  3. 水题ing

    T1: https://www.luogu.org/problemnew/show/P1724幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女.某一天,早苗终于入手了最新款的钢达姆模型.作为最新的钢达姆 ...

  4. 01011_怎么打开任务管理器?win7打开任务管理器方法

    以下几种方法可以打开任务管理器 1.在系统的任务栏点击鼠标右键,然后在弹出的右键菜单中选择“启动任务管理器”: 2.同时按下这三个按钮:Ctrl + Shift + Esc: 3.同时按下键盘的Ctr ...

  5. Dcloud开发webApp踩过的坑

    Dcloud开发webApp踩过的坑 一.总结 一句话总结:HTML5+扩展了JavaScript对象plus,使得js可以调用各种浏览器无法实现或实现不佳的系统能力,设备能力如摄像头.陀螺仪.文件系 ...

  6. tomcat的classloader机制

    本系列博客打算分析一下tomcat7.x的源码,其中可能会穿插一些java基础知识的介绍  读tomcat的源码的时候,我建议和官方的User Guide一起阅读,明白tomcat做某件事情的目的之后 ...

  7. springboot 使用FreeMarker模板(转)

    在spring boot中使用FreeMarker模板非常简单方便,只需要简单几步就行: 1.引入依赖: <dependency> <groupId>org.springfra ...

  8. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【二】人脸预处理

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  9. iOS:实现图片的无限轮播---之使用第三方库SDCycleScrollView

    SDCycleScrollView API // //  SDCycleScrollView.h //  SDCycleScrollView #import <UIKit/UIKit.h> ...

  10. DSO Framer _ WinForm 使用

    根据自己对dsoframer控件的学习,想把dsoframer控件进行简单的包装为C#的usercontrol,大体需要作如下:(创建windows的usercontrol的步骤就不再说了...)我们 ...