您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
第二章 数据类型,运算符和表达式02
发布时间:2021-04-06 22:49:09编辑:雪饮阅读()
查看各个数据类型占用字节大小
#include <stdio.h>
void main(){
//一般的像是int类型占用4个字节
//但是占用多少个字节和系统与编译器规定有关
//所以需要在编译器上自己试试看
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(short));
printf("%d\n",sizeof(float));
}
无符号类型
#include <stdio.h>
void main(){
int a,b,c,d;
//unsigned不是个基础数据类型,是数据类型的一个修饰符表示无符号(即可以正可以负)对应的是signed(通常省略不写)。
//unsigned u ; 与unsigned int u;是同样的。这里省略了int,默认 int.
unsigned u;
a=12;
//int默认有符号,当被无符号赋值,默认应该是会自动转型(个人理解,毕竟转型为比较大的类型才能存储下)
b=-24;
u=10;
c=a+u;
d=b+u;
printf("a+u:%d, b+u:%d\n",c,d);
}
内存溢出分析
#include <stdio.h>
void main(){
short int a,b;
a=32767;
b=a+1;
printf("%d,%d\n",a,b);
}
那么咱们来分析这个溢出的原因。
首先呢short int类型这里他是2个字节,一个字节是8个位,所以这里short int是16个位。
在2进制位中最高位位符号位,1为负,0为正;
所以:
所以正整数中最大的数为0111111111111111 转换成10进制就是即2的15次方-1(32767)
而负整数则比较特殊 最小为1000000000000000 转换成10进制就是即-2的15次方(-32768)
一般的这里以正整数的二进制位,一般在范围内时候除了符号位以外不可能出现那么多1,总会有0的位,那么有0的位存在的时候若增加一个1,因为二进制满二进1,就算把这个0占用了也不打紧,但是如果已经是最大值了即,除了符号位都是1,此时若再加1则进位的时候就会占用到符号位了,则此时符号位为1,而在进位过程中由于进位前已经是最大值,后面的所有的1都会触发满2进1,低位用0来填充,所以最后不仅仅符号位变成1,就连后面的1也全部被推的变成0了,这就正好和上面最小值一样了,哈哈哈。
关键字词:c,c语言