数据类型
1、计算机储存大小排序:位---->字节---->半字---->字
8位=一个字节 一个半字=两个字节 一个字=四个字节
2、检查编译器分配给各个数据类型的大小方法:
printf("%d",sizeof(int));
sizeof用法注意事项:sizeof可以对变量有sizeof (num)的操作,也可以有类似sizeof num的操作;加括号不加括号都可以,而对数据类型进行操作是,必须要加括号来判别他的大小。
数据在内存中的放置
1、
如果我们定义:int num = 5;在内存中num就是以此方式存在的;&num的值为0x1000,这不同于第一个位的地址,
对如果对&num+1则加的是四个字节。
2、不同数据类型在vim中的大小:
int 4字节 short 2字节 long 4字节 char 1字节 float 4字节 double 8字节
指针的固定长度为4字节
对如果对&num+1则加的是四个字节。
2、不同数据类型在vim中的大小:
int 4字节 short 2字节 long 4字节 char 1字节 float 4字节 double 8字节
指针的固定长度为4字节
strlen与sizeof的区别
1>strlen不计算‘\0’,遇到‘\0’停止
2>strlen为函数,sizeof为运算符
char ptr[100] = "hello world";
sizeof (ptr) = 100;
char *ptr = "hello world";
sizeof (ptr) = 4;
char ptr[] = "hello world";
sizeof (ptr) = 12;
数据类型取值范围
以char为例
有符号数:
1、当为正时,即符号位为0时:
因为当正数时源码 = 补码,
所以最大值在内存中的储存应为:0 1 1 1 1 1 1 1 = 2^7 - 1 = 127
所以当有符号数为正数时都为取值范围为:0 ~ 127
2、当为负时,即符号位为1时
负数的补码和源码之间的运算为:符号位不变,数据位取反加一;
1、当为正时,即符号位为0时:
因为当正数时源码 = 补码,
所以最大值在内存中的储存应为:0 1 1 1 1 1 1 1 = 2^7 - 1 = 127
所以当有符号数为正数时都为取值范围为:0 ~ 127
2、当为负时,即符号位为1时
负数的补码和源码之间的运算为:符号位不变,数据位取反加一;
所以:无符号为负数是的取值范围为:-128 ~ -1
综上:有符号输的取值范围为:-128 ~ 127
综上:有符号输的取值范围为:-128 ~ 127
int j = i - 1;
printf("%d",j);
如何提高有符号和无符号的代码移植性问题:
1、如果定义100个char a;因为不同编译器对char的出事定义不同(有的默认char,有的默认unsigned char),我们制作一个头文件typedef.h,内容为:typedef unsigned char Char;在源程序中引用该头文件,就不需要打unsigned char,同时提高代码的可移植性2、当无符号数和有符号数进行比较时,有符号数自动转化为无符号数
比如:a =(-14)>6 ? 1 : 0;则结果为1,因为-14的符号位变成了有效数据位,比原来大(6默认为有符号)