• c 语言学习第二天


    常量

    字符串常量

    • 字符

    例如:'f','i','z','a'编译器为每个字符分配空间。

    'f' 'i' 'z' 'a'
    • 字符串
      例如:"hello"编译器为字符串里的每个字符分配空间以''结束。
    'h' 'e' 'l' 'l' 'o' ''

    基本类型

    • 整数型: short int,int,long int,long long int(c99 新增).占字节大小按照从小到大书写。
    • 浮点数类型:float,double,long double
    • 字符类型: char
    • 布尔类型:_Bool
    • 枚举类型:enum

    sizeof 运算符

    用户获取数据类型或表达式的长度。

    • sizeof(object); // sizeof(对象);
    • sizeof(type_name); // sizeof(类型);
    • sizeof object; // sizeof 对象;

    因为根据编译器不同,以下的数据类型占字节大小仅供参考

    #include <stdio.h>
    
    int main(){
      int i;
      char j;
      float k;
    
      i=123;
      j='c';
      k=3.123;
    
      printf("size of int is %d 
    ",sizeof(int));
      printf("size of i is %d 
    ",sizeof i );
      printf("size of char is %d 
    ",sizeof(char));
      printf("size of j is %d 
    ",sizeof j );
      printf("size of flaot is %d 
    ",sizeof(float));
      printf("size of k is %d 
    ",sizeof k );
    
      return 0;
    }
    
    size of int is 4
    size of i is 4
    size of char is 1
    size of j is 1
    size of flaot is 4
    size of k is 4
    
    #include<stdio.h>
    
    int main(){
    
    printf("int sizeof is %d
    ",sizeof(int));
    printf("short int size is %d
    ",sizeof(short));
    printf("long int size is %d
    ",sizeof(long));
    printf("long long int size is %d
    ",sizeof(long long));
    printf("char size is %d
    ",sizeof(char));
    printf("_Bool size is %d
    ",sizeof(_Bool));
    printf("float size is %d
    ",sizeof(float));
    printf("double size is %d
    ",sizeof(double));
    printf("long double size is %d
    ",sizeof(long double));
    
    return 0;
    }
    
    
    int sizeof is 4
    short int size is 2
    long int size is 8
    long long int size is 8
    char size is 1
    _Bool size is 1
    float size is 4
    double size is 8
    long double size is 16
    

    signed 和 unsigned

    signed:代表带符号位

    unsigned:代表不带符号位 ≥0

    #include<stdio.h>
    int main(){
    short i;
    unsigned short j;
    i = -1;
    j = -1;
    printf("i is %d
    ",i);
    printf("j is %u
    ",j);
    return 0;
    }
    
    i is -1
    j is 65535
    

    计算机数据单位

    cup 读懂的最小单位:bit(比特位).

    bit(比特位) => b

    1 / 0

    Byte(字节) => B

    1 1 1 1 1 1 1 1

    关系:1B = 8b

    1 字节可以表示多大的数? 十进制:255,十六进制:FF

    最大值计算方式:2的n次方-1

    二进制 十进制 十六进制
    0 0 0
    1 1 1
    10 2 2
    11 3 3
    100 4 4
    101 5 5
    110 6 6
    111 7 7
    1000 8 8
    1001 9 9
    1010 10 A
    1011 11 B
    1100 12 C
    1101 13 D
    1110 14 E
    1111 15 F
    10000 16 10
    10001 17 11
    ... ... ...
    11111111 255 FF
    • 计算

    已知int类型为 4 个字节。

    #include<stdio.h>
    #include<math.h>
    int main(){
      int result = pow(2,32)-1;
      printf("result is %d
    ",result);
      return 0;
    }
    
    test6.c: In function ‘main’:
    test6.c:4:2: warning: overflow in implicit constant conversion [-Woverflow]
      int result = pow(2,32)-1;
      ^
    result is 2147483647
    

    运行报出警告,超出定义范围。为什么会这样?

    因为在定义的int类型的时候默认会在前面加上signed类型,所以左边的第一位用来表示符号位。如果为 0 表示正数,如果为 1 表示负数。所以int result其实只有 7 位用来表示数值,其最大值为2^(4*8-1) -1:2,147,483,647.

    修改如下:

    #include<stdio.h>
    #include<math.h>
    int main(){
      unsigned int result = pow(2,32) - 1; // 在int前加上unsigned
      printf("result is %u
    ",result); // 这里的%d 需要改成%u
      return 0;
    }
    
    [root@localhost day1]$ gcc  test6.c  && ./a.out
    result is 4294967295
    

    result 正常显示为 2^8-1 : 4294967295.

    计算机如何存储数值?

    采用补码的形式存储。

    • 正数的补码:该数的二进制形式。
    • 负数的补码:
    1. 先取得该数的绝对值的二进制,也就是正数的二进制。
    2. 将第一步的值按位取反。
    3. 将第二步的值 +1.

    例如:

    7:

    0 0 0 0 0 1 1 1

    -7:

    1. 获得 7 的二进制
    0 0 0 0 0 1 1 1
    1. 按位取反
    1 1 1 1 1 0 0 0
    1. +1
    1 1 1 1 1 0 0 1

    总结

    当左边第一位为0的时候,后面的1越多,字面量值越大。

    当左边第一位为1的时候,后面的0越多,字面量值越大。

    • 基本数据类型取值范围

    有符号 1 字节 => -2^(1x8-1) ~ 2^(1x8-1)-1

    无符号 1 字节 => 0 ~ 2^(1x8)-1

    有符号 4 字节 => -2^(4x8-1) ~ 2^(4x8-1)-1

    无符号 4 字节 => 0 ~ 2^(4x8)-1

    以此类推

    为什么采用补码?

    参考一下链接:

    百度百科:补码

    关于2的补码

  • 相关阅读:
    软件测试的重要性
    软件测试二三事
    白盒测试总结
    黑盒测试总结
    闰年测试以及非法输入的处理方法
    软件测试(3)-基于等价类划分的一个小例子
    第二周课堂小结以及习题思考
    软件测试人员的自身修养
    软件测试的目的和方法
    第七周学习笔记之灰盒测试
  • 原文地址:https://www.cnblogs.com/kongyijilafumi/p/14932117.html
Copyright © 2020-2023  润新知