• c语言数据类型(一)


    (强数据类型)

    1.常量

      常量是程序中不可变的量

      10为常量

      

      两种常量

      #define 定义宏常量

      const

      

      #对于#define 类型的常量,c语言的习惯是常量名称大写, 对于普通const常量以及变量,一般以小写结合大写的方式

    #include <stdio.h>
    
    int main() 
    {
        printf("%d", 10);
        return 0;
    }
    #include <stdio.h>
    
    #define MAX 10 //定义一个宏常量 值为10
    int main() 
    {
        printf("%d", MAX);
        return 0;
    }
    #include <stdio.h>
    
    #define MAX 10 //定义一个宏常量 值为10
    int main() 
    {    
        //MAX = 200; //等号左边必须为变量,不能为常量,常量的值不能修改
        printf("%d", MAX);
        return 0;
    }
    #include <stdio.h>
    int main() 
    {    
        const int a = 100;
        printf("%d", a);
        return 0;
    }

      

      以上为整数常量

      

      字符串 常量

      

    #include <stdio.h>
    #define STRING "hello world
    ";
    int main() 
    {    
        const char * str = "hello c";
    }

    2. 二进制 位 字节 字

      一个位只能表示 0 1 两种状态    bit  1位位1bit

      一个字节为八个二进制  8位   BYTE   8个bit一个字节

      500GB B为BYTE         10Mb bit 

      1个字 2个字节  简称WORD

      2个字为双字      ZWORD

     

      0 八进制 0x 16进制 

      

      原码 反码 补码

      整数占 4个字节 以下只写了 1个字节举例子

       

        

    sizeof 关键字

      是c语言关键字,功能是求指定数据类型所占用的字节数。

    #include <stdio.h>
    int main() 
    {    
        printf("%d
    ", sizeof(10));
        return 0;
    }

      32位(bit)操作系统返回的为4     最大的存储的数字   2(32-1) 的数字

      size_t 类型 

      

    int类型

      int 常量变量

      int 是32位的一个二进制整数,在内存中占据4个字节‘’

       %d  , 输出一个有符号的10进制整数

       %u , 代表输出一个无符号的10进制的整数

    int main() 
    {    
        printf("%x
    ", 0x10);//输出10
        printf("%x
    ", 10);//输出十进制10对应得十六位a
        printf("%x
    ", 0xa);//输出a
        return 0;
    }
    #include <stdio.h>
    int main() 
    {    
        printf("%x
    ", 0x10);//输出10
        printf("%x
    ", 10);//输出十进制10对应得十六位a
        printf("%x
    ", 0xa);//输出a
        printf("%x", -7);
        return 0;
    }
    /*
    printf("%x", -7);  输出 fffffff9(这是-7的补码转换为16进制)
    源码 10000000 00000000 000000000 00000111
    反码 11111111 11111111 111111111 11111000
    补码 11111111 11111111 111111111 11111001
    */

    /*
    -7
    1000 0111 用有符号的眼光-7 无符号的眼光135
    */

     

    %x 代表输出十六进制数 (十六进制不表达负数)

    %X 用大写字母方式输出16进制数

    %o 输出八进制数 (2进制与八进制不表达负数)

    short、 long 、int 、 long long 、unsigned  、signed(有符号数)

      short 为短整数 在32位操作系统占2个字节

      long 代表长整数, 在32位系统下位4个字节  在64位系统下,windows 4个字节  Unix 为八个字节(不同的操作系统不一样)

      int  (32位系统以上)不论在什么情况下都是4个字节 

      long long 是64位 也就是八个字节的整数  对于32位操作系统cpu寄存器位32位的,计算longlong类型的数据, 效率很低

      unsigned  无符号的数,可以加在任意整数类型后面

    #include <stdio.h>
    int main() 
    {    
        int a = 10;//4个字节
        short b = 10;
        printf("%d
    ", sizeof(b));//2
        return 0;
    }
    #include <stdio.h>
    int main() 
    {    
        int a = 10;//4个字节
        short b = 10;
        long long c = 10;
        printf("%d
    ", sizeof(c));//8
        return 0;
    }
    #include <stdio.h>
    int main() 
    {    
        int a = 10;//4个字节
        short b = 10;
        long long c = 10;
        unsigned int d = 10;
        printf("%d
    ", sizeof(d));//4
        return 0;
    }

     整数溢出

    一个整数计算的时候超过整数能够容纳的最大单位后,整数会溢出,溢出的结果是高位舍弃。

     当一个小的整数复制给大的整数,符号位不会丢失,会集成

        unsigned short abc = 0xffff;
        abc = abc + 1;
        printf("%d
    ", abc);//0
        return 0;
      
    #include <stdio.h>
    int main() 
    {    
        int a = 10;//4个字节
        short b = 10;
        long long c = 10;
        unsigned int d = 10;
        printf("%d
    ", sizeof(d));//4
    
        unsigned short abc = 0xffff;
        //abc = abc + 1;
        //printf("%d
    ", abc);//0
        
        abc = abc + 100;
        printf("%d
    ", abc);//99
    
        abc = 2;
        abc = abc - 5;
        printf("%u
    ", abc);//65533
    
        int i1 = 0x12345678;
        abc = i1;
        printf("%x
    ", abc);//5678 
    
        short abc1 = -2;
        //1000 0000 0000 0010
        //1111 1111 1111 1101
        //1111 1111 1111 1110(-2)
        //1111 1111 1111 1111 1111 1111 1111 1110
        
        i1 = abc1;
        printf("%x
    ", i1);//fffffffe
    
        unsigned short abc2 = 0;
    
        abc2 = abc2 - 1;
        //00000000 00000000
        //10000000 00000001
        //11111111 11111110
        //11111111 11111111(65535)
        printf("%d
    ", abc2);//65535
        
        //00000000 00000000 00001100
        //10000000 00000000 00000000 00001010
        //11111111 11111111 11111111 11110110
        return 0;
    
    }

     

    内存都是以字节为单位的 

    1个整数,4个字节

    大端对齐 与小端对齐

      对于arm,intel 这种x86 构架的复杂指令CPU ,整数在内存是倒着放的,低地址放高位,高地址放低位, 小端对齐

      但对于uniux服务器的CPU,更多的是采用大端对齐的方式存放整数

      

     

  • 相关阅读:
    Git fetch和git pull的区别
    gitlab数据迁移
    阿里云CentOS7挂载SSD云盘的方法
    phpQuery的用法
    用shell查找某目录下的最大文件
    gearman 简介
    学习笔记(3)——实验室集群WMS服务配置
    学习笔记(2)——实验室集群LVS配置
    Fedora16的双显卡切换问题
    学习笔记(1)——实验室集群配置
  • 原文地址:https://www.cnblogs.com/long613/p/7617510.html
Copyright © 2020-2023  润新知