• 网易云课堂_C语言程序设计进阶_第一周:数据类型:整数类型、浮点类型、枚举类型


    C语言程序设计进阶_第一周:数据类型:整数类型、浮点类型、枚举类型

    1.0数据类型

    1.1整数类型

    1.2浮点类型

    1.3逻辑类型

    1.4类型转换和条件运算

    1.0数据类型

    1 整数

    char(%c), short, int(%d), long(%ld), long long(C99)

    2 浮点数

    float(%f), double(%lf), long double(C99)

    3 逻辑

    bool(C99)

    4 指针

    5 自定义类型

    所表达的数的范围:char<short<int<float<double

    sizeof是静态运算符,它的结果在编译时刻就决定了

    不要在sizeof的括号里做运算,这些运算不会做的

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 
     5 main()
     6 {
     7     int a = 6;
     8 
     9     printf("sizeof(int)=%d
    ", sizeof(int));
    10 
    11     printf("sizeof(a)=%d
    ", sizeof(a++));//sizeof是静态运算符,它的结果在编译时刻就决定了
    12     //不要在sizeof的括号里做运算,这些运算不会做的
    13     
    14     printf("a=%d
    ", a);//仍然是6
    15 
    16     printf("sizeof(a)=%d
    ", sizeof(a + 1.0));//8,变成double
    17 
    18     printf("a=%d
    ", a);//仍然是6
    19 
    20     system("pause");
    21 }

    1.1整数类型

    整数

    char:1字节,8比特:-128~127

    short:2字节:-32768~32767

    int:取决于编译器CPU,通常的意义是1个字

    long:取决于编译器CPU,通常的意义是1个字

    long long:8字节

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 
     5 main()
     6 {
     7     printf("sizeof(char)=%d
    ", sizeof(char));
     8 
     9     printf("sizeof(short)=%d
    ", sizeof(short));
    10 
    11     printf("sizeof(int)=%d
    ", sizeof(int));
    12 
    13     printf("sizeof(long)=%d
    ", sizeof(long));
    14 
    15     printf("sizeof(long long)=%d
    ", sizeof(long long));
    16 
    17     system("pause");
    18 }

    sizeof(char)=1
    sizeof(short)=2
    sizeof(int)=4
    sizeof(long)=4
    sizeof(long long)=8
    请按任意键继续. . .

    整数的范围

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<limits.h>
     5 
     6 main()
     7 {
     8     char c = 255;
     9     int i = 255;
    10 
    11     printf("c=%d,i=%d
    ", c, i);//char超出范围,所以显示-1
    12 
    13     printf("%d,%d
    ", CHAR_MAX, CHAR_MIN);//127 -128
    14 
    15     system("pause");
    16 }

    补码

    0000 0001(1)+1111 1111(-1)=(1)0000 0000

    1111 1111被当作纯二进制看待时,是255,被当作补码看待时是-1

    同理,对于-a,其补码就是0-a,实际是2^n-a,n是这种类型的位数

    unsigned

    如果一个字面量常数想要表达自己是unsigned,可以在后面加u或U

    255U

    用l或L表示long(long)

    unsigend的初衷并非拓展数能表达的范围,而是为了做纯二进制运算,主要为了移位

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<limits.h>
     5 
     6 main()
     7 {
     8     unsigned char c = 255;
     9     int i = 255;
    10 
    11     printf("c=%d,i=%d
    ", c, i);
    12 
    13     printf("%d
    ", UCHAR_MAX);//255
    14 
    15     system("pause");
    16 }

    整数越界

    整数是以纯二进制方式进行计算的,所以:

    1111 1111+1->1 0000 0000->0

    0111 1111+1->1000 0000->-128

    1000 0000+1->0111 1111->127

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 
     5 main()
     6 {
     7     char c = 127;
     8 
     9     printf("c=%d
    ", c);//127
    10 
    11     c = c + 1;
    12 
    13     printf("c=%d
    ", c);//-128
    14 
    15     c = -128;
    16 
    17     printf("c=%d
    ", c);//-128
    18 
    19     c = c - 1;
    20 
    21     printf("c=%d
    ", c);//127
    22     
    23     unsigned char ch = 127;
    24 
    25     printf("ch=%d
    ", ch);//127
    26 
    27     ch = ch + 1;
    28 
    29     printf("ch=%d
    ", ch);//128
    30 
    31     ch = 255;
    32 
    33     printf("ch=%d
    ", ch);//255
    34 
    35     ch = ch + 1;
    36 
    37     printf("ch=%d
    ", ch);//0
    38 
    39     system("pause");
    40 }

    画图,char,unsigned char的范围

    image

    整数的输入输出

    只有两种类型:int或long long

    %d:int

    %u:unsigned

    %ld:long long

    %lu:unsigned long long

    如果没有特殊需要,只使用int

    1.2浮点类型

    如果没有特殊需要,只使用double

    1.3逻辑类型

    !age<20;

    等价于(!age)<20;

    永远是1

    !done && count > MAX;

    等价于(!done) && (count > MAX);

    短路

    逻辑运算是自左向右进行的,如果左边的结果已经能够决定结果了,就不会做右边的计算

    不要把赋值,包括复合赋值组合进表达式!

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 
     5 main()
     6 {
     7     int a = -1;
     8 
     9     if (a > 0 && a++ > 1)
    10     {
    11         printf("ok
    ");
    12     }
    13 
    14     printf("%d
    ", a);//仍然是-1,短路
    15 
    16     system("pause");
    17 }

    1.4类型转换和条件运算

    当运算符的两边出现不一致的类型时,会自动转换成较大的类型

    大的意思是能表达的数的范围更大

    char->short->int->long->long long

    int->float->double

    自动类型转换

    对曰printf,任何小于int的类型会被转换成int;float会被转换成double

    但是scanf不会,要输入short,需要%hd

    强制类型转换

    要把一个量强制转换成另一个类型(通常是较小的类型),需要

    (类型)值

    (int)10.2

    (short)32

    注意这时候的安全性,小的变量不总能表达大的量

    (short)32768越界

    强制类型转换只是从那个变量计算出了一个新的类型的值,它并不改变那个变量,无论是值还是类型都不改变

    强制类型转换的优先级高于四则运算

  • 相关阅读:
    JS中的“&&”与“&”和“||”“|”有什么区别?
    深入理解CSS过度动画transition
    使用navigator.userAgent查看浏览器当前模式和版本
    node.js面试题
    Javascript 中的 ...(展开运算符)
    JavaScript立即执行函数
    JavaScript实现继承的6种方式
    JavaScript的排序算法--冒泡、选择、直接插入
    JavaScript RegExp 对象
    (CVPR 2020 Oral)最新Scene Graph Generation开源框架
  • 原文地址:https://www.cnblogs.com/denggelin/p/5575192.html
Copyright © 2020-2023  润新知