美文网首页
重新开始的c语言

重新开始的c语言

作者: ie大博 | 来源:发表于2016-10-18 19:43 被阅读0次

    c语言中怎样用scanf()读入带空格的字符串

    #include <stdio.h>
    int main()
    {
        char str[128];
        scanf( "%[^\n]", str );
        printf( "%s\n", str );
        return 0;
    }
    

    c语言编译常识

    • gcc hanshu.c -o hanshu:生成了一个可运行的文件,文件名称可以自己定,hanshu.c只是随便一个代码文件,注意后面的命名不要和前面的相同。
    • gcc hanshu.c -o hanshu -g -wall,:-g -wall是开启所有的语法警告。
    • 我的电脑是小端法存储,其显示结果是103,说明地址0xf1存的是67.
    • %p输出变量的地址
    int main()
    {
    
        int a = 0x1234567;
        char *p = (char*)&a;
        //char *p = char *(&a);
        printf("*p=%d",*p);
        return 0;
    }
    
    • 打印双引号,需要加转译字符"
    • 打印%,需要在其前再加一个%
    • 打印,需要在其前面加一个\
    • 打印’ 需要加\

    char型的asc码的一些数值

    • ' 空格 ':空格的asc码是32
    • ‘0’是32
    • '\0'是0
    • ‘A’是65
    • ‘a’是97

    scanf===scan formatter扫描 格式化

    强制类型转换(type)

    int main()
    
    {
        int a=9;
        int b=8;
        float c=a/(float)b;////价格(float)转换了b的类型,实际上转换了8成8.0000000
    
        printf("c=%f",c);
        return 0;
    
    }
    

    位运算

    • |或运算:::3:的二进制:0011······5的二进制:0101:::3|5表示0111;其意义是二进制,有1结果就是1
    • &与运算:::必须两个都为1,结果才是1
    • ^异或:::表示一个为1结果才是1,如果两个都是1,结果为0;
    • ~取反:::3的取反为4.取反都是在补码的基础上操作的。

    原码,反码,补码

    • 反码:正数的反码与原码;负数的反码在原码的基础上,符号位不变,后面依次取反。
    • 补码:正数的补码与原码相同;负数的补码在反码的基础上+1。数据在内存当中是以补码的形式存在。
    • -3取反:
      原码:1000 0000 |0000 0000 |0000 0000 |0000 0011
      反码:1111 1111 |1111 1111 |1111 1111 |1111 1100
      补码:1111 1111 |1111 1111 |1111 1111 |1111 1101
      在这基础上全部取反
      ~(-3)
      0000 0000 |0000 0000 |0000 0000 |0000 0010
      正数的反码,补码都一样。
      所以结果是2.

    左移,右移:

    案例:-3的左移2位(-3)<<2

    -3的原码:1000 0000 |0000 0000 |0000 0000 |0000 0011
    -3的反码:1111 1111 |1111 1111 |1111 1111 |1111 1100
    -3的补码:1111 1111 |1111 1111 |1111 1111 |1111 1101
    左移两位:1111 1111 |1111 1111 |1111 1111 |1111 0100
    左移反码:1111 1111 |1111 1111 |1111 1111 |1111 0011
    左移原码1000 0000 |0000 0000 |0000 0000 |0000 1100

    案例:-3的右移两位:注意左边是以符号位补全

    -3的原码:1000 0000 |0000 0000 |0000 0000 |0000 0011
    -3的反码:1111 1111 |1111 1111 |1111 1111 |1111 1100
    -3的补码:1111 1111 |1111 1111 |1111 1111 |1111 1101
    -右移两位:1111 1111 |1111 1111 |1111 1111 |1111 1111
    右移后反码:1111 1111 |1111 1111 |1111 1111 |1111 1110
    右移后原码:1000 0000 |0000 0000 |0000 0000 |0000 0001

    一个特殊的例子

    {
        int a=1;
        int b=12;
        if(a++||b--)
        {
            printf("a=%d\n",a);///a自加1,所以打出来。
            printf("b=%d\n",b);///因为a已经成立了,
                               所以b不会自加1就进入到判断里面了,结果a=2,b=12.
        }   
        return 0;
    
    
    }
    

    unsigned的使用

    int main()
    {
        unsigned char a=-1;////这里的-1,它的补码存储:1111 1111,
        因为他是没有正负号,所以我们默认它为正,把补码变成原码,它就是255.
        int i=0;
        printf("a=%d",a);
        while(a>0)
        {
            a--;
            i++;
        }
            printf("a=%d",a);
            printf("i=%d",i);
        return 0;
    }
    

    用二维数组写菱形,

    {   
        int i,j;
        char a=' ';
        char b='*';
        int  arr[5][5]={
                            {a,a,b,a,a},
                            {a,b,a,b,a},
                            {b,a,a,a,b},
                            {a,b,a,b,a},
                            {a,a,b,a,a},
                        };///如果arr是char型的,逗号就没办法处理
        for(i=0;i<5;i++)
        {
            for(j=0;j<5;j++)
            {
                printf("%c",arr[i][j]);
    
            }
            printf("\n");
        }
        return 0;
    
    }
    

    continue和break

    相关文章

      网友评论

          本文标题:重新开始的c语言

          本文链接:https://www.haomeiwen.com/subject/wkygyttx.html