zoukankan      html  css  js  c++  java
  • C语言整数

      转自:https://www.freecplus.net/5629077dbacd449d8b6c8311b6a7897e.html

    类型简写

    类型全称

    长度

    取值范围

    short

    [signed] short [int]

    2字节

    -32768~32767

    unsigned short

    unsigned short [int]

    2字节

    0~65535

    int

    [signed] int

    4字节

    -2147483648~2147483647

    unsigned int

    unsigned [int]

    4字节

    0~4294967295

    long

    [signed] long [int]

    8字节

    -9223372036854775808~

    9223372036854775807

    unsigned long

    unsigned long [int]

    8字节

    0~18446744073709551615

    二进制数、八进制数和十六进制数的书写

    一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式。但是,表示一个二进制、八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种特殊的写法,具体来说,就是在数字前面加上特定的字符,也就是加前缀。

    // 以下是合法的二进制
      int a = 0b101;      // 换算成十进制为 5
      int b = -0b110010;  // 换算成十进制为 -50
      int c = 0B100001;   // 换算成十进制为 33
    // 以下是非法的二进制
      int m = 101010;  // 无前缀 0B,相当于十进制
      int n = 0B410;    // 4不是有效的二进制数字

    请注意,标准的C语言并不支持上面的二进制写法,只是有些编译器自己进行了扩展,才支持二进制数字。换句话说,并不是所有的编译器都支持二进制数字,只有一部分编译器支持,并且跟编译器的版本有关系。

    2、八进制

    八进制由 0~7 八个数字组成,书写时必须以0开头(注意是数字 0,不是字母 o),例如:

      // 以下是合法的八进制数
      int a = 015;      // 换算成十进制为 13
      int b = -0101;    // 换算成十进制为 -65
      int c = 0177777;  // 换算成十进制为 65535
     
      // 以下是非法的八进制
      int m = 256;  // 无前缀 0,相当于十进制
      int n = 03A2;  // A不是有效的八进制数字

    3、十六进制

    十六进制由数字 0~9、字母 A~F 或 a~f(不区分大小写)组成,书写时必须以0x或0X(不区分大小写)开头,例如:

      // 以下是合法的十六进制
      int a = 0X2A;   // 换算成十进制为 42
      int b = -0XA0;  // 换算成十进制为 -160
      int c = 0xffff;   // 换算成十进制为 65535
     
      // 以下是非法的十六进制
      int m = 5A;    // 没有前缀 0X,是一个无效数字
      int n = 0X3H;  // H不是有效的十六进制数字

    4、需要注意的坑

    在现实生活和工作中,我们在写十进制数的时候,为了对齐或其它原因,在数值前面加0是无关紧要的,但是,在C语言中,不要在十进制数前加0,会被计算机误认为是八进制数。

    四、整数的输出

    以下表格中,重点记住第一、二行十进制的输出格式,十六进制数只在显示内存的地址时见过,了解即可。

    %hd、%d、%ld

    以十进制、有符号的形式输出short、int、long 类型的整数。

    %hu、%u、%lu

    以十进制、无符号的形式输出short、int、long 类型的整数。

    %ho、%o、%lo

    以八进制、不带前缀、无符号的形式输出 short、int、long 类型的整数

    %#ho、%#o、%#lo

    以八进制、带前缀、无符号的形式输出   short、int、long 类型的整数

    %hx、%x、%lx
      %hX、%X、%lX

    以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。

    %#hx、%#x、%#lx
      %#hX、%#X、%#lX

    以十六进制、带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。

    注意一个坑:输出格式控制符的类型最好与变量的类型一一对应,否则会出现意外的后果。

    五、常用的库函数

    C语言提供了几个常用的库函数,声明如下:

    int  atoi(const char *nptr);   // 把字符串nptr转换为int整数
    long atol(const char *nptr);     // 把字符串nptr转换为long整数
    int  abs(const int j);            // 求int整数的绝对值
    long labs(const long int j);     // 求long整数的绝对值

    六、数据类型的别名

    C语言许程序员使用 typedef 关键字来给数据类型定义一个别名,别名一般有两个特点:1)名称更短;2)更符合程序员的习惯。

    例如unsigned int起个size_t的别名。

    typedef signed   char     int8_t;        //1个字节8位
    typedef unsigned char     uint8_t;      //1个字节8位
    typedef signed   short    int16_t;      //2个字节16位
    typedef unsigned short    uint16_t;    //2个字节16位
    typedef signed   int      int32_t;         //4个字节32位
    typedef unsigned int      uint32_t;       //4个字节32位
    typedef signed   long int int64_t;  //8个字节64位
    typedef unsigned long int uint64_t; //8个字节64位
    typedef unsigned int size_t;
    size_t ii; 等同于 unsigned int ii;

    七、随机数

    在实际开发中,会用到随机数这个功能,例如编写游戏类的程序时就需要用到随机数。

    1、生成随机数

    在C语言中,我们使用 <stdlib.h> 头文件中的 srand和rand 函数来生成随机数。

    void srand(unsigned int seed);   // 随机数生成器的初始化函数
    int  rand();                        // 获一个取随机数

    srand函数初始化随机数发生器(俗称种子),在实际开发中,我们可以用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同,通常我们采用 <time.h> 头文件中的 time 函数即可得到一个精确到秒的时间作为种子。

    示例(book63.c)

    /*
     * 程序名:book63.c,此程序用于演示随机数
     * 作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    int main()
    {
      int ii;
     
      srand(time(0));  // 播下随机种子
     
      for (ii=0;ii<5;ii++)  // 生成5个随机数
      {
        printf("%d ", rand());  // 获取随机数
      }
     
      printf("
    ");
    }

    2、生成一定范围随机数

    在实际开发中,需求往往是一定范围内的随机数,对于产生一定范围的随机数,就需要使用一定的技巧,常用的方法是取模运算(取余数),再加上一个加法运算:

      
    int a = rand() % 50;   // 产生0~49的随机数

    如果要规定上下限:

      
    int a = rand() % 51 + 100;   // 产生100~150的随机数

    取模即取余数,rand()%51+100,rand()%51是产生 0~50 的随机数,后面+100保证 a 最小只能是 100,最大就是 50+100=150。

  • 相关阅读:
    HashMap、ConcurrentHashMap红黑树实现分析
    分布式系统ID
    分布式事务
    LRU算法实现
    Redis 深入
    分库分表利器——sharding-sphere
    Java常用的八种排序算法
    浅析Tomcat
    Kafka
    如何选择分布式事务形态
  • 原文地址:https://www.cnblogs.com/sdb1942/p/13211272.html
Copyright © 2011-2022 走看看