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″:    字符串常量必须以’\0’来结束,占两个字节。

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\n”,a,y,y); }

输入1234567891234567890

输出1,1234567891234567936.000000,1234567891234567936.000000

gdb:

Breakpoint 1, main () at 12_11_4.c:77 a = scanf(“%lf”,&y);(gdb) s123456789123456789128 printf(“%d,%f,%lf\n”,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\n”,a,y,y);

}

输入123.11

输出1,0.000000,0.000000

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

看gdb调试:

Breakpoint 1, main () at 12_11_4.c:77 a = scanf(“%f”,&y);(gdb) s1234.1238 printf(“%d,%f,%lf\n”,a,y,y);(gdb) p y$1 = 4.8545332934724682e-270

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

  

年轻是我们唯一拥有权利去编织梦想的时光

C语言学习笔记(一)

相关文章:

你感兴趣的文章:

标签云: