Bootstrap

C基础注意事项

计算机中基本的单位

1.计算机的基本存储单位:比特(bit),一个bit中只能存储一个0或者1

2.计算机中的基本存储单元字节(byte)

1bit位 只能存储一个0或者1   1byte = 8bit

1Kb = 1024byte 1Mb = 1024Kb 1Mb = 1024Kb  1Gb = 1024Mb  1Tb = 1024Gb

原码反码补码

在计算机中,保存的其实是它的补码

有符号的数据类型中,最高位是符号位,0表示正数,1表示负数;我们通过十进制转二进制得出的结果就是这个数的原码正数的反码补码都和原码一样而负数的反码是符号位不变,其他位按位取反,补码则是反码+1。

拿1和-1来举例,他们的原码反码补码分别是(以16位系统举例,在16位系统中,int类型占2字节)

1的原码:0000 0000 0000 0001   -1的原码:1000 0000 0000 0001

1的反码:0000 0000 0000 0001   -1的反码:1111 1111 1111 1110

1的补码:0000 0000 0000 0001   -1的补码:1111 1111 1111 1111

注:由此可得,

数据类型

1常用数据类型在不同位计算机中的大小

16位计算机中,char占1字节,int 占2字节long int 占4字节,float占4字节,double占8字节

32位计算机中,char占1字节,int 占4字节long int 占4字节,float占4字节,double占8字节

64位计算机中,char占1字节,int 占4字节long int 占8字节,float占4字节,double占8字节

运算符优先级

                

14

=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=

赋值表达式表达式=表达式右到左双目运算符
15       ,逗号表达式表达式,表达式左到右多目运算符

(略微不全)

三目运算

条件语句 ? 返回值a:返回值b

这里的条件语句规则跟if语句里的条件语句规则一样

返回值a和b可以是变量,也可以是常量。例:

^按位异或

格式 a^b 相同为0,不同位1例:

4^5=0000 0100

      ^0000 0101

---------------------

        0000 0001 = 1;

~按位取反

格式~a

          ~11=~0000 1011  (用户的是char类型的11,因为int类型太大不是很好算,用char来演示)

(变成了补码)1111  0100=(反码)1111 0011=(原码)1000 1100=-12

 这里涉及到了原码反码补码的转换,没看懂的可以去仔细了解下,所以~11=-12

位移运算符 <<   >>

<<

格式 : a<<移动位数

char a = 4;

4<<1 = 0000 0100 << 1=0000 1000=8

在数据没有溢出的时候,相当于*2

>>

格式 : a>>移动位数

4>>1 = 0000 0100 >>  1=0000 0010=2

在数据没有溢出的时候,相当于/2

注:有符号的类型,符号位不动,高位补零

除法 /

除法的符号规则:单负为负,负负为正

取模 %

取模的符号规则:先当正数取模,然后结果看被除数的符号而定

函数

unsigned 无符号数据类型 例:unsigned int 无符号整型

sizeof() 计算数据类型大小,计算变量的所占内存空间大小,例:

int a = 1;
sizeof(int); //结果是 4
sizeof(a); //结果是 4

strlen是计算字符串的有效长度到\0字符位置为止

sizeof是获取要建立的变量对应的空间大小
sizeof是运算符,strlen是函数
sizeof在程序编译完成后就计算完毕,而strlen只有在程序运行到该位置后,才能调用计算

scanf : %d %f %s遇到空格,换行,制表符\t会停止读取,并忽略空格和换行

scanf : %c会获取空格,换行,制表符.

字符串相关函数

以下函数都在"string.h"头文件中,使用前要把头文件预编译

strlen(字符串名称);

作用:计算字符串长度,不含'\0';

char word[20] = "hello,word";
int a = strlen(word), b = sizeof(word);
printf("%d \n", a);   //结果是:11
printf("%d \n", b);   //结果是:20

strcpy(目标数组名,源数组名);

作用:拷贝字符串,将源字符串开始,到'\0'结束(结束符也会拷贝过去),然后将拷贝的内容放到目标数组中。

由此可得,源数组中的字符覆盖了目标数组中的字符,最后以'\0'结束,没覆盖到的字符则还存在

strcmp(字符串1,字符串2);

作用:字符串比较,比较字符串1和字符串2的大小,字符数组容量不影响大小

strcmp(字符串1,字符串2);有3种返回值(返回能比较出大小的俩字符ASSIC相差数):

>0 字符串1比字符串2大

=0 字符串1和字符串2一样大

<0 字符串2比字符串1大

strcat

未完待续

;