• C/C++(基础-常量,类型转换)


    字符 char

    ascII码表

    #include<stdio.h>
    int main()
    {
        unsigned char ch;
        for(ch = 0;ch < 128;ch++)
        {
            printf("%3d-->>>%c  ",ch,ch);
            if(ch % 32 == 0)
            {
                putchar(10);
            }
        }
        printf("
    
    ==================
    
    ");
        for(char ch1 = 'a';ch1 <= 'z';ch1++) {
            printf("%3d-->>>%c  
    ",ch1,ch1);
        }
        return 0;
    }
    
    

    48---0,57--9;
    65---A,97--a;

    for(char ch = 'a';ch <= 'z';ch++) {
            printf("ch=%3d 小写字母:%c
    ",ch,ch);
            printf("ch=%3d 大写字母:%c
    ",ch-32,ch-32);
            printf("ch=%3d 大写字母:%c
    ",ch-' ',ch-' ');//空格的asc码值32
        }
    
        for(int i = 0;i <= 10;i++) {
            printf("%d
    ",i);
        }//1-10 数值
        for(char j = 48;j <= 48+9;j++) {
            printf("%d %c 
    ",j,j);
        }//第1组输出的是asc码
        //%c输出字符所对应的asc码值
        printf("---------------------------
    ");
        for(char k = '0';k <= '0'+9;k++) {
            printf("%d %c 
    ",k,k);//第一组字符对应的asc码。第二组字符。
        }
    

    转义字符

    本身已有一个字符的意义,给他另外一个别的意义。
    字符语义被征用,回归本义
    有新的需求能通过转义实现新的功能。

     printf("%d %d %d %d
    ",'
    ','
    ','	','');//对应的asc: 10 13 9 8
    

    常量

    常量是程序中不可变的量,常以字面量(赋值的数),或者宏的方式出现(#define Pi 3.1415926)。
    用途:赋值,运算。
    常量的类型:

     printf("sizeof(0) == %d sizeof(0.0) == %d 
    ",sizeof(0),sizeof(0.0));//sizeof(0) == 4 sizeof(0.0) == 8
    

    不同类型的-1在内存中存放的补码。

    char ch = -1;//1111 1111
    short sh = -1; //1111 1111 1111 1111
    int in = -1;//1111 1111 1111 1111 1111 1111 1111 1111
    
    

    1111 1111
    十进制:255(8,4,2,1计算)
    十六进制:0xff(4位刚好是十六进制的一位)
    八进制:0377(3位刚好是八进制的一位)
    整型常量:10,8,16进制数
    实型:小数(.)
    指数:123.45678=1.2345678e2科学计数法

    1.字母e或者E前后必须有数字。
    2.字母e或者E后面的指数必须为整数,字母e或者E的前后及数字之间不得有空格。
    字符常量:char a = 'a';
    字符串常量:char aa = "aaa";

    格式的输入与输出

    printf("格式字符串",[输出列表]);//print:打印format:格式
    %d:十进制输出
    %x:十六进制输出
    %o:八进制数据输出
    %f:实行数据输出
    %c:字符型输出
    
    int aa = 0x66;
    printf("%#d",aa);
    printf("%#x",aa);
    printf("%o",aa);//aa并没有变只是以进制的形式输出
    

    printf 中至少有两类:控制格式,飞哥是字符。
    格式字符要求跟输出一一对应,非格式字符原样输出,其作用是原样输出,提示,显示作用。
    格式字符串:

    "%[标志][输出最小宽度][.精度][长度]类型"//[]可以省略
    

    当实际宽度大于所给的宽度,按照实际输出。
    标志:-(左对齐),+(默认,右对齐)0(不够补0)#(用于表示进制)

    scanf:键盘输入
    scanf("%d%d",&d,&d);//天然的间隔:tab enter(结束) 空格,格式串和被输入的变量一一对应。非格式串,需要原样输入。
    

    注意:%c在scanf,中会有点问题,在空格的处理上有点问题。

    char a = 'a';
    char b = 'b';
    scanf("%c%c",&a,&b);//输入格式字符串中本身有三种间隔,超过两个%c在输入过程中获取到了本身的空格。
    scanf("%c %c",&a,&b);//解决了,还是有麻烦,空格在中间还可以。(但是输入的时候很多空格也可以)
    

    getchar,putchar;

    char ch;
    ch = getchar();//从键盘输入一个字符
    putchar(ch);//输出一个字符
    putchar(10);//回车,回车的ascii是10
    

    类型转换

    隐式转换

    不需要认为参与而产生的默认转换。

    1.整型提升
    2.混合提升
    整型提升:
    char,short,int等类型一起运算时,首先提升到int。

    char ch;short sh;int in;
    printf("sizeof(ch)=%d
    ",sizeof(ch));//1
    printf("sizeof(ch+ch)=%d
    ",sizeof(ch+ch));//4
    
    printf("sizeof(sh)=%d
    ",sizeof(sh));//2
    printf("sizeof(sh)=%d
    ",sizeof(sh));//4
    
    printf("sizeof(in)=%d
    ",sizeof(in));//4
    printf("sizeof(in)=%d
    ",sizeof(in));//4
    

    大数据赋值给小数据会溢出,小范围向大范围转由于符号的扩充保证了数据的正确性。

    混合提升:
    进行运算时以表达式中最长类为主,将其他类型数据均转换成该类型。

    float 4  double 8
    int   4  long long 8 
    

    int和float字节数相同到底是向谁转化?

    float fl = 3.14;
    int in = 4;
    long long lo = 4;
    printf("fl+in=%d
    ",%d);//错误值
    printf("fl+in=%f
    ",%d);//7.14正确
    printf("fl+lo=%d
    ",%d);//错误
    printf("fl+lo=%f
    ",%d);//7.14正确
    
    

    说明int=>>>float
    long long
    =>>>float=>>>double
    隐式转换规则:从小向大的方向(不讨论溢出,截断,无符号)
    char
    =>>>short=>>>int=>>>long long=>>>float=>>>double

    赋值转换

    int in = 10;
    float fl = 3.14;
    in = fl;//小数赋值给整数变整数
    printf("%d
    ",in);//3
    
    
    fl = in;//整数赋值给小数变小数
    printf("%d
    ",fl);//10.0
    

    强制类型转换

    int a = 10;
    int b = 3;
    printf("%d
    ",a/b);//3由于两个数都是int没有变量提升,要想得到3.3333可以强制类型转换
    printf("%f
    ",(float)a/b);//3.333333
    printf("%f
    ",a/(float)b);//3.333333
    

    浮点数跟0的比较

    float data = 0.0;
    if(data == 0) {
        printf("true");
        }else{
            printf("false");
        }
    
    if(data == 0.0) {
        printf("true");
        }else{
            printf("false");
        }
        //结果都是正确的,但是有问题
        double tem = 0.3;
        printf("%d
    ",(int)(tem*10));//0.3,0.7会出错,其他的可以。
        printf("%d
    ",(int)((tem+0.000001)*10));//0.3,0.7正确无误,加上修正值
        //0.3 实际村的是 0.299999 或者0.311111
    
    double tem = 0.0;
    if(tem>0-0.000001 && tem < 0+0.000001) {
        printf("true");
        }else{
            printf("false");
        }
    
  • 相关阅读:
    MySQL优化
    SLAM01
    图像处理04
    Be accepted for inclusion in the IEEE INFOCOM 2018 technical program
    CS229 Lecture 02
    图像处理03
    Codeforces 900D Unusual Sequences:记忆化搜索
    Codeforces 914C Travelling Salesman and Special Numbers:数位dp
    BZOJ 4199 [Noi2015]品酒大会:后缀数组 + 并查集
    BZOJ 4650 [Noi2016]优秀的拆分:后缀数组
  • 原文地址:https://www.cnblogs.com/intelwisd/p/8180154.html
Copyright © 2020-2023  润新知