一、数据类型
    为什么要对数据进行分类
        1、现实中的数据就是自带类别属性的
        2、对数据进行分类可以节约内存存储空间、提高运行速度
    C语言中数据分为两大类别:自建(程序员自己设计的),内建(C语言自带的)
    存储空间的单位:
        bit 比特 存储一个二进制位,只能存储0或者1,计算机存储数据的最小单位
        Byte 字节 存储八个二进制位,计算机存储数据的基本单位
        KB 1024字节
        MB 1024KB
        GB 1024MB
        TB 1024GB
        PB 1024TB
    sizeof():可以计算类型变量所占内存字节数
    整型:
        signed 有符号 二进制最高位为符号位 0正数 1负数
            类型名              字节数              数据范围
            signed char         1                   -128~127
            signed short        2                   -32768~32767
            signed int          4                   正负20亿
            signed long         4(32位)/8(64位)
            signed long long    8                   正负9开头19位整数
        注意:signed可以不写
        unsigned 无符号 二进制最高位为数据位
            类型名              字节数              数据范围
            unsigned char       1                   0~255
            unsigned short      2                   0~65535
            unsigned int        4                   0~40亿
            unsigned long       4(32位)/8(64位)
            unsigned long long  8                   0~1开头20位整数
        注意:由于定义无符号数据时比较麻烦,在标准库中把这些类型重新定义成了新的类型名
            需要包含头文件名<stdint.h>
            uint8_t\uint16_t\uint32_t\uint64_t
            int8_t\int16_t\int32_t\int64_t
    浮点型:
        float           4               单精度浮点型
        double          8               双精度浮点型
        long double     12(32位)/16(64位)      
        注意1:采用科学计数法、在二进制与真实数据之间需要进行换算过程,因此浮点数的运算使用速度比整数型慢得多,所以编程时尽量用整数型
        注意2:大部分操作系统只对小数点后6位有效  
    模拟型:
        字符型:char
            字符就是图案或符号,在内存中本质上依然存储成整数,需要显示成字符时,操作系统会根据ASCII码表中的对应关系把整数显示成对应的符号或图案
            ''      0       特殊字符 空字符
            '0'     48
            'A'     65
            'a'     97
            char想要显示成整数:%hhd
                想要显示成字符:%c
        布尔型:bool
            现有的C语言后有的bool类型,C语言中不可能有真正的布尔类型,都是用<stdbool.h>中使用整数对布尔类型进行模拟
            bool -> true false
二、变量与常量
    变量 -> 在程序运行期间值可以发生变化的叫做变量,相当于存放数据的盒子
    定义:
        类型名 变量名;
            int num;
            取名规则:
                1、由字母、数字、下划线组成
                2、不能以数字开头
                3、不能与C语言32个关键字重名
                4、见名知意(功能、类型、范围...)
        注意:如果一个变量的初始值默认是随机的,一般为了安全,在定义时对变量初始化为0
    使用:
        赋值:      变量名 = val;
        参与运算:  变量名*10;
    变量的输入、输出:
        int printf(const char *format, ...);
        功能:输出数据
        format:"提示信息+占位符"
        ... :变量名列表
        返回值:成功输出的字符个数
        类型占位符:C语言通过占位符的方式传递变量的类型
            %hhu %hu %u %lu %llu unsigned char/short/int/long/long long
            %hhd %hd %d %ld %lld signed char/short/int/long/long long
            %f float
            %lf double
        字符型:%c char
        int scanf(const char *format, ...);
        功能:输入数据
        format:"占位符"
        ...:变量地址列表
            注意:scanf需要变量类型和地址
                变量地址 == &变量名
        返回值:成功输入的变量个数
       
    常量 -> 在程序运行期间值不发生变化
        10      默认 int
        10l     long
        10ll    long long
        10u     unsigned int
        10lu    unsigned long
        10llu   unsigned long long
        3.14    默认 double
        3.14f   float
        3.14l   long double
        问题:定义一个100年总共有几秒的宏定义(忽略闰平年)
            #define SEC 3600*24*365*100u
三、格式化输出
    %nd     显示n个字符宽度,不足时补空格,右对齐
    %-nd    显示n个字符宽度,不足时补空格,左对齐
    %0nd    显示n个字符宽度,不足时补0,右对齐
    %n.md   显示n个字符宽度(小数点也算一位),不足时补空格,右对齐,m表示小数点后显示的位数(四舍五入)
    %g      不显示小数点后多余的0
四、运算符
    自变运算符:
        ++/-- 让变量的值自动加一或减一
        前自变:++/--num    立即有效
        后自变:num++/--    下一行语句才有效
        注意:不要在一行代码中多次出现自变运算符
    算数运算符:
        + - * / %
        整数/整数 只保留整数部分
        / % 除数不能为0,否则会在运行时出现浮点数例外(核心已转储)
        % 不能对浮点数求余
    关系运算符:
        == != > < >= <=
        会得到比较的结果是1(成立)或0(不成立),比较的接果还可以继续参与运算
   
    逻辑运算符:
        && || !
        会先把运算对象转换成逻辑值,非零转为真,0转为假,然后在参与逻辑运算
        A && B  一假即假
        A || B  一真即真
        !A      求反
        &&和||的短路特性:
            当左边部分的值已经确定整个逻辑运算符的结果时,那么右边部分不执行
            也可以借助短路特性,实现简单的单分支效果
    三目运算符:
        A ? B : C
            判断A的值如果为真,则执行B的内容,否则执行C的内容
    赋值运算符:
        = += -= *= ...
        a += b;
        注意:赋值运算符的运算结果是右边赋的数据
    位运算符:& | ~ ^ << >>  
五、类型转换问题
    只有相同类型的数据才能能进行运算,如果类型不相同的数据需要先转换成相同的类型才能运算
    自动类型转换:
        转换规则:以不丢失数据为基础,可以适当地牺牲一些空间
            1、字节少的向字节多的转
            2、有符号的向无符号的转
            3、整型向浮点型转
            特例:当运算对象类型只是char或者short,编译器会做类型提升,提升为int再运算
    强制类型转换:
        (新类型名)数据;
        有丢失数据的风险,但是需要使用时还是得用

Linux & 标准C语言学习 <DAY4>的更多相关文章

  1. Unix和Linux下C语言学习指南

    转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...

  2. linux 下C语言学习路线

    UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...

  3. UNIX/Linux下C语言的学习路线

    一.工具篇 “公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工具. 1.操作系统    在UNIX或 ...

  4. C语言学习008:标准错误

    在上一节中的数据文件中(C语言学习007:重定向标准输入和输出),如果文件中的数据包含非法数据,如何让程序显示一条错误的提示消息呢?就需要用到标准错误 #include <stdio.h> ...

  5. Linux下C语言编程基础学习记录

    VIM的基本使用  LINUX下C语言编程 用gcc命令编译运行C语言文件 预处理阶段:将*.c文件转化为*.i预处理过的C程序. 编译阶段:将*.i文件编译为汇编代码*.s文件. 汇编阶段:将*.s ...

  6. 实验四 Linux系统C语言开发环境学习

    项目 内容 这个作业属于哪个课程 Linux系统与应用 这个作业的要求在哪里 作业要求链接 学号-姓名 17041428-朱槐健 作业学习目标 1.Linux系统下C语言开发环境搭建 2.学习Linu ...

  7. 【C语言学习】《C Primer Plus》第1章 概览

    学习总结 1.C语言于1972年由贝尔实验室的Dennis Ritchie在与Ken Thompson一起设计UNIX操作系统的时候开发的.的的设计构想来源于Ken Thompson的B语言.Anyw ...

  8. LINUX下C语言编程基础

    实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...

  9. 郝斌老师C语言学习笔记(一)

    在给变量分配内存时,很可能这段内存存在以前其他程序使用留下的值.当使用VC编译器,若编译器发现没有给变量赋值而使用,就会返回一个以“85”开头的很大的数字(此时该段内存中为一个垃圾数,为了避免出现较常 ...

  10. 【转】朱兆祺教你如何攻破C语言学习、笔试与机试的难点(连载)

    原文网址:http://bbs.elecfans.com/jishu_354666_1_1.html 再过1个月又是一年应届毕业生应聘的高峰期了,为了方便应届毕业生应聘,笔者将大学四年C语言知识及去年 ...

随机推荐

  1. HCIP-ICT实战进阶04-ISIS原理与配置

    HCIP-ICT实战进阶04-ISIS原理与配置 0 前言 IS-IS(Intermediate System to Intermediate System, 中间系统到中间系统)协议, 和OSPF一 ...

  2. HCIA-ICT实战基础10-广域网技术PPP

    HCIA-ICT实战基础-广域网技术PPP 目录 早期广域网技术概述 PPP协议原理与配置 1 早期广域网技术概述 1.1 什么是广域网 广域网是连接不同地区局域网的网络, 通常所覆盖的范围从几十公里 ...

  3. Leetcode本地阅读器开发--01界面设计二

    返回项目声明及目录:Leetcode本地阅读器开发--总声明 继续上一节内容: 1.第一个内容是左边第一行的功能,读取默认路径和修改路径.此路径为本地阅读器的搜索题目的主目录. 为了整个程序都能读取工 ...

  4. 24 Django模块的导入--常用总结

    常用模块导入 1 forms # forms组件的使用 from django import forms 2 ValidationError # modelform报错时使用 from django. ...

  5. git-开发常用命令

    1.本地克隆代码 git clone http地址 2.查看所有分支 git branch -a remotes/origin开头 :远程分支 3.切换分支 git checkout 分支名 4.删除 ...

  6. js判断变量数据类型typeof、instanceof、Object.prototype.toString.call()、 constructor

    JavaScript有4种方法判断变量的类型,分别是typeof.instanceof.Object.prototype.toString.call()(对象原型链判断方法). constructor ...

  7. 面向对象程序设计 第二章 C++简单的程序设计

    目录 C++语言的特点 1.兼容C语言 · 它保持了C的简洁.高效和接近汇编语言等特点. · 对C的类型系统进行了改革和扩充. · C++也支持面向过程的程序设计,不是一个纯正的面向对象的语言 2.支 ...

  8. Bugku Log4j2 漏洞题目 解题参考

    Log4j2 漏洞题目 题目地址 https://ctf.bugku.com/challenges/detail/id/340.html?page=1 二.攻击环境准备 需要一台linux云服务器,把 ...

  9. Spring系列之基于环境抽象-10

    目录 Bean 定义配置文件 使用 `@Profile` XML Bean 定义配置文件 激活配置文件 默认配置文件 `PropertySource` 使用`@PropertySource` Envi ...

  10. Spring Boot统一日志框架

    一.日志框架的选择 市面上常见的日志框架有很多,它们可以被分为两类:日志门面(日志抽象层)和日志实现,如下表.  日志分类 描述 举例 日志门面(日志抽象层) 为 Java 日志访问提供一套标准和规范 ...