C语言整型常量和变量

1.C语言的数据类型   1byte == 8bit
    基本类型:系统分配给基本类型的变量的内存大小固定
        整型
            (unsigned) short   2字节
            (unsigned) int     4字节
            (unsigned) long    8字节/4字节

        实型(浮点型)
            单精度实型 float    4字节
            双精度实型 double   8字节

        字符型
            (unsigned) char     1字节

    ♥构造类型:系统分配给构造类型变量的内存大小,取决于该类型具体时如何定义的
        数组类型
        结构体类型
        联合体型(共用体)
        枚举类型

    ♥指针类型
        *

    空类型(无类型)
        void

2.常量和变量
    常量:在程序运行期间,其值不能被改变的量称为常量
        如:1  2  3.1415926
        3 = 4; // error 3是一个常量,其值不能被改变,3要是能变成4,岂不是不三不四!

    变量:一个可以被改变的量
        变量实质上时内存中具有特定属性的存储单元,它是用来存放数据。这个存储单元中的数据,就是变量的值,而这个值在程序运行期间可以被改变(赋值)。

    变量名:变量的名字
        ⭐系统把内存以一个字节为单位划分成很多份进行编号,这个编号就是地址(无符号整数),即每增加一个字节地址加1。操作系统访问哪个内存单元时,就必须要知道它的地址。
        在定义变量时,会在内存分配空间(大小根据变量的类型决定),这时变量名就与该空间的首地址关联,即操作系统由变量名去指导该内存空间的地址。

    变量的定义:
        数据类型 变量名;

        eg: int a; // 定义了一个 int 型的变量a,其空间大小是4字节
            "数据类型":所有的C语言合法的类型都可以
            "变量名":给存储数据的哪个对象(变量)取个名字,来代表它
        ⭐在C语言中,不管你是给什么东西起名字,都必须要符合C语言标识符命名规则:
          C语言标识符必须由字母、数字、下划线组成,且第一个字符必须是字母或者下划线。

                    int 3coutrt; // error 数字开头
                    int score+; // error 包含了 +
                    int count3; // 正确
                    int _score; // 正确

  编程规范:
(1)变量名取名时避免以下划线开头,因为下划线开头的符号一般用于编译器编译的符号。
(2)给对象(变量)取名时,尽量做到“见其名知其意
(3)标识符不能是C语言保留的关键字
          int short; // error short是关键字
          int Short; // 正确
 (4)C语言是区分大小写
          eg: count 和 Count 是两个不同的意思
 (5)在ANSI标准中,"nin-lengh && max-information"   (最短的长度表达最多的信息

    变量的访问(读/写)
        (1)从变量中取值(读)。实际上是通过变量名找到相应的内存地址,从该地址对应的存储单元中读取数据。 这时变量一般在赋值符号(=)的右边,表示变量的值,我们称为右值。
        (2)给变量赋值(写)。实际上是通过变量名找到对应的内存地址,把数值写到地址对应的存储单元中去, 覆盖掉原来的值,这时变量一般在赋值符号(=)的左边,表示变量的内存单元,我们称为左值。
            int a;
            int b;
            a = b; // a是表示变量的内存单元,b是变量的值

        我们把给变量第一次赋值叫做初始化,若变量没有初始化,该值???
            (a)随机值       (b)0

    常变量:定义时用 const 修饰的变量。初始化后不能再赋值的变量,即只读变量。
        eg: const int c=3;
            c = 250; // error

3.整型数据
    整型常量:
        十进制数 1,2,3,99,250                    %d(格式控制符)
        八进制数 以0开头的数据  0666                 %o
        十六进制数 以0x开头的数据 0x12,0x99,0xff     %x

    整型变量:
        ⭐整型数据在内存中是以二进制的补码形式存放的,且最高位为符号位
        1) 1表示负数,0表示正数,其他位为数值位

        2)"补码"
            正数:原码,即直接转化成二进制
            负数:该值的绝对值的原码取反加1

        (1)可以推出 short 的表示范围为 -2^15 ~ 2^15-1    2^15=32768
        (2)short a=32767; // 32767=2^15-1
            a = a + 1; // 数据溢出
            printf("%d\n", a); // -32768
        (3)当编译器以无符号整数输出(%u),就没有符号位的概念了,全部当作数值位
        转化为十进制数输出。

    ⭐无符号和有符号的本质区别:
        当CPU把数据进行计算时,需要把变量的数据拷贝到CPU内部的寄存器(32bit),
        当变量的数据小于32bit位时,有符号的数据拷贝到寄存器最高位补符号位,
        无符号的数据拷贝到寄存器最高位补0。 

    ⭐%u 和 %d 都是以 int 型的十进制形式打印

    ⭐C语言各整数之间赋值问题:
        长->短:sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
            只保留低字节
            例如:
                short a = 0xc1d1; // 1100 0001 1101 0001
                char b = a; // 1101 0001
        短->长:char->int char->short  short->int
            unsigned(无符号):低字节直接拷贝,高位补0
            signed(有符号):低字节直接拷贝,高位补符号位

4.浮点型数据
    单精度 float 32bits      %f
    双精度 double 64bits     %lf

    (1)注意:小数保存在内存中,有可能保存的是近似值
    (2)浮点型和零的判断
        float b;
        #define ESP 0.00000001
        if(b <= ESP && b >= -ESP) // 浮点型数据和零的比较 (只能无限接近于0,不能直接等于0)

5.字符型数据
    (usnigned ) char 8bits   %c
    在内存中,字符型的变量存储的实际是一个小于255的整数数据,这个数据就是字符的ASCII值
 把字符为两类:
        (1) 普通字符: 可以打印的字符,有形状
            如:
                'a' ~ 'z'
                'A' ~ 'Z'
                '0' ~ '9'
                ...
               char a = 'a' ;
        (2) 特殊字符(转义字符):不可以打印的字符,没有形状
                '\n' : 换行符
                '\r' : 回车符
                '\t' : 制表符

                '\\'       反斜杠
               '%%'       %
                ... 
                '\ooo': 由\后跟1个、2个、3个八进制数字组成,
                        这些八进制数字用来所期望的字符的ASCII码

6.字符串数据  %s
        字符串常量是用 "" 括起来的,如:"abcd"、"123456"...
        字符串保存在内存中时,其末尾一定有一个 结束标识符'\0'(它的ASCII就是0)
        字符串没有对应的基本类型,字符串是用字符数组来保存的。
            eg:  printf("i like %s\n", "zhoujielun");

字符常量  和 字符串常量 是不一样的
                字符常量 表示的是单个字符, 用 单引号 引起来
                    如:   '0'
                字符串常量 表示的是一串字符, 用 双引号引起来
                    如:  "0"

总结:

数据以补码形式存在,以原码输出

1.先判断数据类型(字节大小)(有符号无符号)

         无符号:低字节直接拷贝,高位补0

         有符号:低字节直接拷贝,高位补符号位

2.通过数据类型求补码

        正数:原码,直接转换成二进制

        负数:该值的绝对值的原码取反加一

3.判断打印方式%d,%u

        %d:有符号转化成原码(减一取反)

        %u:无符号转化成原码(正数原码补码一样)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值