`
mikixiyou
  • 浏览: 1086532 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
C3c8d188-c0ab-3396-821d-b68331e21226
Oracle管理和开发
浏览量:349477
社区版块
存档分类
最新评论

char,short ,int ,long,long long,unsigned long long数据范围

    博客分类:
  • iOS
阅读更多

编程语言的基础类型速查表

char -128 ~ +127 (1 Byte)
short -32767 ~ + 32768 (2 Bytes)
unsigned short 0 ~ 65536 (2 Bytes)
int -2147483648 ~ +2147483647 (4 Bytes)
unsigned int 0 ~ 4294967295 (4 Bytes)
long == int
long long -9223372036854775808 ~ +9223372036854775807 (8 Bytes)
double 1.7 * 10^308 (8 Bytes)

unsigned int 0~4294967295 
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161

__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615

 

详细教程:

====================

符号属性 长度属性 基本型 所占位数 取值范围 输入符举例 输出符举例 
    -- -- 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 也是三种互不相同的类型。 

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 类型的长度、精度及表示范围与所使用的编译器、操作系统等有关。

分享到:
评论

相关推荐

    stm32上实现卡尔曼滤波,可以用于多处滤波处理,目标预测处理,平滑数据处理,数据融合处理

    stm32上实现卡尔曼滤波,可以用于多处滤波处理,目标预测...typedef unsigned short int uint16_t; typedef unsigned long long uint64_t; typedef unsigned char bool_t; typedef float fp32; typedef double fp64;

    深入解析unsigned int 和 int

    2.unsigned—–无符号,修饰int 、char3.long——长型,修饰int 、double4.short——短型,修饰int 我们主要来看一下signed和unsigned与int之间的联系与区别。什么叫做有符号,什么叫做无符号这个问题其实很简单,...

    C++数据类型及取值范围

    C++数据类型及取值范围 1.基本数据类型: ①字符类型:char(字符型) 例:‘A’,’b’ ...unsigned int 4 同unsigned long float 4 1.2E-38到3.4E381 double 8 2.2E-308到1.8E3082 bool 1 true或false

    SegyExample

    short i2(char* buf, int nbyte); char i1(char* buf, int nbyte); void si4(char* buf, int nbyte, int i); void si2(char* buf,int nbyte, short i); void si1(char* buf, int nbyte, char i); int swapi4(int x...

    简单总结C++中的修饰符类型

    C++ 允许在 char、int 和 double 数据类型前放置修饰符。修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。 下面列出了数据类型修饰符: signed unsigned long short 修饰符 signed、unsigned、...

    详解C语言中的char数据类型及其与int类型的转换

    char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed。虽然char在标准中是unsigned(因为char类型提出的初衷是用来表示ascii码,ascii码的范围是0~127),但实际...

    C++基本数据类型总结

     1、整形有char、short、int、long、long long,这5个也默认为signed XX ;  规则:short至少16位;int至少和short一样;long至少32位,且至少和int一样长;long long至少64位,且至少和long一样长。  其中,...

    C语言宏定义技巧(常用宏定义)

    typedef unsigned long int uint32; /* Unsigned 32 bit value */ typedef unsigned short uint16; /* Unsigned 16 bit value */ typedef unsigned char uint8; /* Unsigned 8 bit value */ typedef signed...

    linux下 将uyvy格式图片转换成bmp格式

    typedef unsigned short int WORD; typedef unsigned char BYTE; typedef long LONG; #define clip(min, x, max) x=(x ) ? min : (x > max) ? max : x #define BI_RGB 0L typedef struct tagTABLE_UYVY2RGB { ...

    一种快速清空结构体的方法

    void Clear(unsigned char *Ptr, int Size ){ while(Size!=0) { *Ptr++ = 0; Size --; }} 函数的调用如下。 void main(){ Clear(( unsigned char *)&Tab[0],sizeof(Tab)); // 将结构体的起始地址进行强制转型...

    Python Json序列化与反序列化的示例

    C的数据类型有(bit、bool、char、int、short、long、unsigned、double、float) Tcl的数据类型(int、bool、float、string) Ruby的数据类型(Number、String、Ranges、Symbols、true、false、Array、Hash) … 他们的...

    c语言或者c++ :Bit manipulations 位操作

    Define an unsigned long integer and initialise it to the binary pattern: 0101 1111 0001 1000 1001 0010 1101 0011 Using hexadecimal notation print the hex value on the console. Write a function to ...

    c++ 面试题 总结

    int main(int argc, char* argv[]) { int a = 10; int k = 2; int m = 1; a /= SQR(k+m)/SQR(k+m); printf("%d\n",a); return 0; } 这道题目的结果是什么啊? define 只是定义而已,在编择时只是简单代换X...

    C++笔记--你一定用的上

    unsigned short(unsigned short int);2 bytes; 0~65535 16位机 32位机 int(signed int); 2 bytes; -32768~32767; ;4 bytes; -(2^31)~(2^31)-1 unsigned int; 2 bytes; 0~65535 ; ;4 bytes; 0~(2^32)-1 long...

    服务器压力测试小工具

    int msg_short_connect_recv_data(long s,long c,void *dat,long len) { unsigned char *ou_dat=(unsigned char*)tcc_malloc(5120); get_hex_string(dat,len,ou_dat); tcc_tell_user(5120,"s:%d c:%d len:%d\n%s...

    Delphi 与 C/C++ 数据类型对照表

    Delphi 数据类型 C/C++ ShorInt 8位有符号整数 char Byte 8位无符号整数 BYTE,unsigned short ...Integer,LongInt 32位有符号整数 int,long Cardinal,LongWord/DWORD 32位无符号整数 unsigned long

    C++ 修饰符类型

    C++ 允许在 char、int 和 double 数据类型前放置修饰符。修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。 下面列出了数据类型修饰符: signed unsigned long short 修饰符 signed、unsigned、long 和...

    linux网络编程学习笔记

    unsigned long int htonl(unsigned long int hostlong) unsigned short int htons(unisgned short int hostshort) unsigned long int ntohl(unsigned long int netlong) unsigned short int ntohs(unsigned short...

    初级C语言教案 auto break case char const

    初级C语言教案 适用于初学者,对初学者很有帮助.里面介绍的 很详细auto break case char const ...if int long register return short signed sizeof static struct switch typedef unsigned union void volatile while

    标准MFC WinSock ActiveX控件开发实例(II)高级篇

    case 0://默认形式,这时如果发现Data为整型数组,将不进行任何转换,直接把一个int传给一个char传送(数据可能溢出范围) case 1://当指定该值为1时,当Date为长整型数组时,将把一个long转换成四个char传送 case 2://...

Global site tag (gtag.js) - Google Analytics