• C语言学习笔记(一)


    1.原码和补码

      例子

         '6':原码:0110;   补码:0110

         '-6':原码:1110;  反码:1001;补码:1010 = 1001 + 1

      (-6) + 6 = 0110 + 1010 = (1)0000 = 0;

       当对补码取补时,得到的是他的原码;

    2.编译过程:

      预编译——>编译(汇编语言)——>汇编(机器语言)——>链接

    3.'chmod -R': 针对目录,将目录下的子目录及文件的权限全部修改。

    4. snprintf()和sprintf()的比较:snprintf()要求其第二个参数指定目标缓冲区的大小,可确保缓冲区不溢出。

    5.32位UNIX系统的一般编程模型称为ILP32模型,表示整数(I),长整数(L),和指针(P)都占用32位

      数据类型            ILP32模型           LP64模型

        char                8                8

        short              16                16

         int                 32                32

         long               32                64

         pointer               32                64

    6.对整型常数进行类型转换的后缀有:u或U(unsigned)、l或L(long)、u/U与l/L的组合(如:ul、lu、     Lu等)。例:100u; -123u; 0x123l。

     通过后缀L或l将整数强行存储在long类型中。

     所有的实数都是以double存储。

    7.常量在内存中的存储方式:

      1(0x0001): 在内存中以unsigned short(两字节)存储;

      '1'(0x31):   一个字节;

      "1":      字符串常量必须以''来结束,占两个字节。

    8.scanf()输入结束的条件:

      a.遇空格,TAB,或回车

      b.

      c.遇非法字符

      scanf()有返回值,成功返回"1",不成功"0"。

    9.

      a: for(i = 0; i < n; i++)

            a[i] = 4;

      b: for(p = a; p < a + n; p++)

           *p = 4;

      (a)以a为首地址,向前移动i个元素,每次赋值都要这样做,"[]"是个运算符。

      (b)每次都向后移一个单位就行了,(b)的效率明显要高。

    10.%f和%lf

      

    (a):

    <stdio.h>

    int main()

    {        

      int a, b, c;        

      double y;        

      a = scanf("%lf",&y);        

       printf("%d,%f,%lf ",a,y,y); }

    输入1234567891234567890

    输出1,1234567891234567936.000000,1234567891234567936.000000

    gdb:

    Breakpoint 1, main () at 12_11_4.c:7
    7               a = scanf("%lf",&y);
    (gdb) s
    12345678912345678912
    8               printf("%d,%f,%lf ",a,y,y);
    (gdb) p y
    $2 = 1.234567891234568e+19

    (b):

    #include <stdio.h>

    int main()

    {        

      int a, b, c;        

      double y;        

      a = scanf("%f",&y);        

      printf("%d,%f,%lf ",a,y,y);

    }

    输入123.11

    输出1,0.000000,0.000000

    第二次输出为什么都是零呢?

    看gdb调试:

    Breakpoint 1, main () at 12_11_4.c:7
    7               a = scanf("%f",&y);
    (gdb) s
    1234.123
    8               printf("%d,%f,%lf ",a,y,y);
    (gdb) p y
    $1 = 4.8545332934724682e-270

    1234.123是被读入成功的,但是存放格式是float。

      

  • 相关阅读:
    [luogu T71973]卡常者π酱
    [日常] HEOI 2019 退役记
    [教程]网络流详解: 从入门到放弃
    [LOJ 6213]「美团 CodeM 决赛」radar
    [BZOJ 1568][JSOI2008]Blue Mary开公司
    [BZOJ 3167][HEOI 2013]SAO
    [BZOJ 4763]雪辉
    [LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅
    [HZNOI #koishi] Magic
    [luogu P4230]连环病原体
  • 原文地址:https://www.cnblogs.com/huanchao/p/3467974.html
Copyright © 2020-2023  润新知