IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]C语言基础课程 第四课 它山之石可以攻玉---C语言数据类型和表达式

    yincheng01发表于 2014-10-13 17:32:18
    love 0
    

    1 C语言中的数据类型

    1.1 常量

    常量就是在程序中不可变化的量

    1.1.1 #define

    #define MAX 10

    Define的常量一般用大写定义,这是惯例,而不是强制要求

    1.1.2 const

    const int i =100;//定义了一个int型的常量

    1.2 字符串常量

    “hello world”

    C语言“”都是字符串常量

    1.3 二进制数、位、字节与字

    我们习惯于十进制的数:10,12等

    一个位只能表示0,或者1两种状态,简称bit

    一个字节为8个二进制,称为8位,简称BYTE

    一个字为2个字节,简称WORD。

    两个字为双字,简称DWORD

    0 1 10 11 100

    1.4 八进制

    八进制为以8为基数的数制系统,C语言当中0表示八进制,0666;

    1.5 十六进制

    十六进制值16为基数的数制系统,C语言中用0x表示十六进制

    十进制

    十六进制

    二进制

    0

    0

    0000

    1

    1

    0001

    2

    2

    0010

    3

    3

    0011

    4

    4

    0100

    10

    a

    1010

    11

    b

    1011

    12

    c

    1100

    13

    d

    1101

    14

    e

    1110

    15

    f

    1111

    16

    10

    1.6 原码

    将最高位做为符号位(0代表正,1代表负),其余各位代表数值本身的绝对值

    +7的原码是00000111

    -7的原码是10000111

    +0的原码是00000000

    -0的原码是10000000

    1.7 反码

    一个数如果值为正,那么反码和原码相同

    一个数如果为负,那么符号位为1,其他各位与原码相反

    +7的反码00000111

    -7的反码11111000

    -0的反码11111111

    1.8 补码

    原码和反码都不利于计算机的运算,如:原码表示的7和-7相加,还需要判断符号位。

    正数:原码,反码补码都相同

    负数:最高位为1,其余各位原码取反,最后对整个数 + 1

    -7的补码:=

    10000111(原码)

    111111000(反码)

    11111001(补码)

    +0的补码为00000000

    -0的补码也是00000000

    补码符号位不动,其他位求反,最后整个数+ 1,得到原码

    用补码进行运算,减法可以通过加法实现

    7-6=1

    7的补码和-6的补码相加:00000111 + 11111010 = 100000001

    进位舍弃后,剩下的00000001就是1的补码

    -7+6 = -1

    -7的补码和6的补码相加:11111001 + 00000110 = 11111111

    11111111是-1的补码

    1.9 10进制转化16进制技巧

    用16为除数,求商数和余数,直到商数为0的时候,将余数倒过来就是转化后的16进制数

    1.10 sizeof关键字

    sizeof与size_t类型

    1.11 int类型

    1.11.1 int常量,变量

    int是最常用的数据类型,在32位和64位系统下都是4个字节

    1.11.2 printf输出int值

    printf(“%d”, 可以是常量或者变量)

    1.11.3 printf输出八进制和十六进制

    按照8进制输出printf("%o\n", MYINT);

    按照16进制输出printf("%x\n", MYINT);

    1.11.4 short,long,long long,unsigned int

    short代表2个字节的int

    long在32位系统下是4个字节的int,在64位系统下是8个字节的整数

    long long 不论是在32位还是在64位系统下都是8个字节的int

    unsigned short

    unsigned int

    unsigned long

    9l,9L,9ll,9LL,9u,9ull,9ULL

    1.11.5 整数溢出

    unsigned int i = 0xffffffff;

    i = i + 1;

    printf("%u\n", i);

    1.11.6 大端对齐与小端对齐

    Arm,X86构架的CPU都是采用小端对齐:高位放入高地址,低位放入底地址

    UNIX大型服务器CPU都是大端对齐的,高位放入底地址,低位放入高地址

    1.12 char类型

    1.12.1 char常量,变量

    ‘a’;表示一个字符

    Char在c语言当中大小是1个字节

    Char就是一个字节整数

    1.12.2 printf输出char

    printf(“%c”, 字符类型);

    1.12.3 不可打印char转义符

    \a,警报

    \b退格

    \n换行

    \r回车

    \t制表符

    \\斜杠

    \’单引号

    \”双引号

    \?问号

    1.12.4 char和unsigned char

    char取值范围为-128到127

    unsigned char为0-255

    1.13 浮点float,double,longdouble类型

    1.13.1 浮点常量,变量

    5f;float

    5d;double

    Int a = 3;

    Int b = 2;

    Double c = 3 /2 ;;//相当于两个整数相除的结果是整数,将整数赋给c,那么小数点精度会丢失,所以这个时候c=1.00000

    1.13.2 printf输出浮点数

    %f,%Lf

    1.14 类型限定

    1.14.1 const

    const 不可改变的量

    1.14.2 volatile

    不要让编译器自作聪明的去优化代码

    1.14.3 register

    register int I =10;

    register意思是告诉编译器,这个变量要在寄存器里面运算,而不是通过内存运算,这样会大大的提升效率。

    Register只是一个建议,而不是命令。如果程序执行的时候,CPU有空闲的寄存器,那么register就是有效的,如果没有空闲寄存器,那么register就是无效的

    2 字符串格式化输出和输入

    2.1 字符串在计算机内部的存储方式

    字符串是内存中一段连续的char空间,以’\0’结尾

    2.2 printf函数,putchar函数

    printf格式字符

    字符

    对应数据类型

    含义

    d

    int

    接受整数值并将它表示为有符号的十进制整数

    hd

    Short int

    短整数

    hu

    Unsigned short int

    无符号短整数

    o

    unsigned int

    无符号8进制整数

    u

    unsigned int

    无符号10进制整数

    x / X

    unsigned int

    无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF

    f

    float或double

    单精度浮点数或双精度浮点数

    e / E

    double

    科学计数法表示的数,此处"e"的大小写代表在输出时用的“e”的大小写

    c

    char

    字符型。可以把输入的数字按照ASCII码相应转换为对应的字符

    s / S

    char * / wchar_t *

    字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符)

    p

    void *

    以16进制形式输出指针

    %

    %

    输出一个百分号

    printf附加格式

    字符

    含义

    l

    附加在d,u,x,o前面,表示长整数

    -

    左对齐

    m(代表一个整数)

    数据最小宽度

    0

    将输出的前面补上0直到占满指定列宽为止不可以搭配使用-

    N(代表一个整数)

    宽度至少为n位不够以空格填充

    2.3 scanf函数与getchar函数

    3 运算符表达式和语句

    3.1 基本运算符

    3.1.1 =

    数据对象:泛指数据在内存的存储区域

    左值:表示可以被更改的数据对象

    右值:能赋给左值的量

    3.1.2 +

    加

    3.1.3 –

    减

    3.1.4 *

    乘

    3.1.5 /

    除

    3.1.6 %

    取余数,两个数相除的余数。

    3.1.7 +=

    加等于

    3.1.8 -=

    减等于

    3.1.9 *=

    乘等于

    3.1.10 /=

    除等于

    3.1.11 %=

    取余等于

    3.1.12 ++

    自加1

    i++;先计算i的值,然后再++

    ++i;先++,然后在计算I值

    3.1.13 --

    自减一

    3.1.14 逗号运算符

    int a = 2;

    int b = 3;

    int c = 4;

    int d = 5;

    int i = (a = b, c + d);

    逗号表达式先求逗号左边的值,然后求右边的值,整个语句的值是逗号右边的值。

    3.1.15 运算符优先级

    优先级

    运算符

    结合性

    1

    ++(后缀),--(后缀),()(调用函数),{}(语句块),.,->

    从左到右

    2

    ++(前缀),--(前缀),+(前缀),-(前缀),!(前缀),~(前缀),sizeof,*(取指针值),&(取地址),(type)(类型转化)

    从右到左

    3

    *, /, %

    从左到右

    4

    +,-

    从左到右

    5

    << >>

    从左到右

    6

    < > <= >=

    从左到右

    7

    == !=

    从左到右

    8

    &

    从左到右

    9

    ^

    从左到右

    10

    |

    从左到右

    11

    &&

    从左到右

    12

    ||

    从左到右

    13

    ?

    从右到左

    14

    =,*=,%=,+=,-=,<<=,>>=,&=,|=,^=

    从右到左

    15

    ,(逗号运算符)

    从左到右

    3.2 复合语句

    {}代码块

    3.3 类型转化

    double f = (double)3 / 2;



沪ICP备19023445号-2号
友情链接