18.7.21随堂记录

1.#C语言因为可以操作内存,所以效率非常高。linux是使用C语言编写。内核和驱动也是由C语言编写。
        
2.#数据类型:
/基本数据类型+复合数据类型
/整形一定不比短整型短;长整形一定不比整形短。
#/32位linux中各个关键字所占的字节数。
#char:1  用来表示256个ASCⅡ字符,或者0~255的整数。
#short:2
#int:4
#long:4
#float:4
#double:8

C实现:
int main()
{   int a;char b;double c;
    printf("int : %d\n",sizeof(a));  //sizeof()定是用来求数据类型长度。
    printf("int : %d\n",sizeof(int));//sizeof()是关键字不是函数。
return 0;
}


#内存是以字节为单位,每个字节有一个地址,每个地址占8bit。

#*有无符号char型所占字节和数的表示范围
有符号char 占8为 数的表示范围:-128~127
无符号char 占8为 数的表示范围:0~255(2^8-1)

signed char
内存里最高位是符号位,1代表正数,0代表负数。
01111111 有符号位的最大数 2^7-1=127
11111111 有符号位的最小数 (-1)*2^7=-127
(注:10000000 = -128 00000000 = 0)

unsigned char
11111111 无符号的最大数 2^8-1=255
00000000 无符号的最小数 0

注:char a ='a';//字符在内存中都是以ASCⅡ形式存储。//所有字符都是以单引号存储。

#strlen()
C表示:
#include<stdio.h>
#include<string.h>
int main()
{ char *ptr="hello\0world!";
  printf("%d\n",strlen(ptr));//strlen遇到字符'\0'结束;'\0'是字符串结束标志;'\0'默认存在于任何字符串的结尾;'\0'是一个字符,但不被strlen()所计数;'\0'对应整型0,所以strlen()遇到数字0也结束。
return 0;
}
结果为:5

eg:#include<stdio.h>
     #include<string.h>
               int main()
       { 
               char a[1000];
               int i;
               for(i=0;i<1000;i++)
              {
                    a[i]=-1-i;
              }
               printf("%d\n",strlen(a));
               return 0;
        }
输出结果:255

#eg:
      int i=-20;
      unsgned int j=10;
      i+j=?(4294967286)//使用"%u"打印。如果用"%d"则默认会发生强制转换。
解释:
int a=1;
内存中存储形式:
00000000 00000000 00000000 00000001

int i=-20;
内存中存储形式:
反码:10000000 00000000 00000000 00101011//负数以补码形式存储↓
补码:11111111 11111111 11111111 11101100//补码

#eg:
     int a; char b;
     a+b
111111111111111111111111111111 int      表示范围大
                                            11111111 char
如果需要混合运算,则需要在char 之前补0,将char型转换成int型。
即转换成可以表示范围大的类型。


#思考*
const,volatile是什么意思?
1.const
作用:修饰只读变量
          const int a;//并且不能通过变量a修改对应内存的值↓。
C表示:
#include<stido.h>
int main()
{
     const int a=1;//编译时会出错,不能向只读变量a赋值
     a = a+1;
     return 0;
}

#include<stido.h>
int main()
{
     const int a=1;
     int *p=(int *)&a;
     *p=2;//可以通过其他方式(指针)来修改内存里面的值。
     printf("%d\n",a);     
     /*
    const int *p;
    (*p++);               //不合法
    int *const q;
    q++;                  //不合法
    const int * const z;
    (*z)++;
    z++;                  //不合法
    */(学习完指针内容再来理解)
     return 0;
}

2.volatile
作用:防止编译时被优化。
eg: int a;
         a=0;//没有用
         a=1;

#数据表现形式有两种:
  1.常量  2.变量
 常量:1/整型,2/实型,3/字符,4/字符串,5/枚举
1/:十进制;以数字0开头是八进制;以'0x'或者'0X'开头是十六进制。

猜你喜欢

转载自blog.csdn.net/qq_41481342/article/details/81147649