计算机中基本的单位
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大