计算机内存是有大量的字节构成的
每一个字节的大小是固定的 1字节等于8比特
任何变量一定对应一个或者多个连续的字节
在内存中有每个字节有一个地址 两个字节的地址一定不会一样
地址是从0开始逐渐递增
变量的地址是其中所有最前面字节的地址 地址越小的越靠前,越大的越靠后
数据所占空间的大小来划分数据类型
任何变量对应的字节个数一定是2的整数次方
sizeof 关键字 可以用来计算一个变量或者某种数据类型所占空间大小 以字节为单位
#include <stdio.h>
int main(){
printf("char size : %d\n",sizeof(char));
return 0;
}
#include <stdio.h>
int main(){
char ch = 0;
printf("char size : %d\n",sizeof(ch));
return 0;
}
char & unsigned char 1个字节
short & unsigned short 2个字节
int & unsigned int 4个字节
long & unsigned long 4个字节
float 4个字节
double 8个字节
sizeof 关键字的小括号里面可以写一个计算表达式,sizeof 关键字对计算结果求大小 这个表达式中对变量的修改没有效果
#include <stdio.h>
int main(){
char ch = 0;
printf("char size : %d\n",sizeof(ch));
sizeof(ch = 10);
printf("ch:%hhd\n",ch);
return 0;
}
每个字节包含8个不同的二进制位
计算机使用二进制表示所有数字 二进制中每个数位上只有0或者1两种可能
二进制和十进制只是表示数字的两种方式 任何一个数字任何时候可以用十进制的方式便是也可以用二进制的方式表示
1010 0101 =》 165
1000 0000 =》128
0010 0000 =》32
0000 0100 =》4
0000 0001 =》1
八进制
把二进制数字从右向左 每三个数位分为一组 用0到7数字来表示 就是八进制了
程序中可以使用八进制数字必须以0作为开头避免和十进制混淆
019
#include <stdio.h>
int main(){
int num = 023;
printf("num is : %d\n" , num);
return 0;
}//打印的是十进制的
#include <stdio.h>
int main(){
int num = 023;
printf("num is : 0%o\n" , num);
return 0;
}//打印的是八进制的
%o 是一个占位符 可以把整数的八进制表示形式打印
十六进制
把二进制数字从右向左每四个数位分成一组 每组用一个字符表示的结果就是十六进制
十六进制每个数位上使用0-9 a-f 表示
程序中也可以直接使用,必须在前面加上0x
#include <stdio.h>
int main(){
int num = 0x1234;
printf("num is : %d\n",num);
return 0;
}//打印的是十进制的
#include <stdio.h>
int main(){
int num = 0x1234;
printf("num is : %x\n",num);
return 0;
}//打印的是十六进制的 字母小写
#include <stdio.h>
int main(){
int num = 0x1234;
printf("num is : %X\n",num);
return 0;
}//打印的是十六进制的 字母大写
%x 是一个占位符 可以把整数的十六进制形式打印
计算机中表示数字的二进制叫做补码
非负数的补码和原码一样
负数的补码
负数的二进制是 正数的二进制取反+1
原码:一个整数,按照绝对值大小转成的二进制数 就是原码
反码:将二进制数按位取反 得到的新的二进制数就是反码
补码:反码加1就是补码
正数的补码就是他本身
负数的补码就是反码+1
0001 0000
1110 1111
1111 0000
所有符号数据的最好二进制为叫符号位
0是非负数
1是负数
整数类型之间赋值要保持二进制不变
有符号数据扩充的时候在前面补充符号位
C语言中的 + - * / %
,也可以当操作符使用
,可以把两个无关的表达式连接在一起
合并后的结果就是后一个表达式的结果
,操作的优先级非常低
#include <stdio.h>
int main(){
printf("%d",(1+2,3+4));
return 0;
}
=操作符 可以用来改变变量的内容
赋值操作符的左边必须是左值(变量)
赋值操作符的右边必须能蛋数字使用
赋值操作符的优先级低但是比逗号高
多个赋值操作符计算顺序是从右向左
双目操作符需要和两个数字联合使用
很多双面操作符可以和赋值操作符 合并 形成复合赋值操作符 += -= *= /= 也是双目操作符
符合赋值操作符中的双目操作符优先级和赋值操作符一样低
自增 自减 都是单目操作符 只能对变量进行操作
++ --
这种有前操作和后操作两种,但是在单独使用的时候不区分
#include <stdio.h>
int main(){
int num = 0;
num++;
printf("num is : %d\n",num);
num--;
printf("num is : %d\n",num);
++num;
printf("num is : %d\n",num);
--num;
printf("num is : %d\n",num);
return 0;
}
前操作的优先级很高,后操作的优先级最低
#include <stdio.h>
int main(){
int num = 0;
int num1 = num++;
printf("num is : %d ; num1 is : %d" ,num,num1);
return 0;
}
不要在一条语句中对同一个变量进行多次自增或者自减计算(结果不确定,根据编译器的不同而不同)
布尔值
true 或者 false
布尔值类型 bool 用来描述布尔值
为了使用布尔类型需要把stdbool.h 文件合并进来
布尔值在计算机内部仍然使用 整数表示 真1 假 0
#include <stdio.h>
#include <stdbool.h>
int main(){
bool flag = true;
printf("flag is : %d\n",flag);
flag = false;
printf("flag is : %d\n",flag);
return 0;
}