总结表示形式和计算方法
重点:类型转换、数值溢出、移位等操作
整型
表示形式 | 字节数及取值范围 |
---|---|
int | 4字节(-2147438648~+2147438647) |
short int | 2字节(-32768~32767) |
long int | 4字节(-2147483648~2147483647) |
unsigned int | 4字节(0~65535) |
unsigned short int | 2字节(0~65535) |
unsigned long int | 4字节(0~4294967295) |
-
整型溢出
无符号整型溢出后,溢出数据会以2^(8*sizeof(type))做模运算。而符号整型溢出,溢出结果以编译器算得的实际结果为结果,该结果不一定是负数。
整型溢出有可能会导致程序死循环、产生安全问题或影响内存分配等等。 -
移位
C语言里所有的位运算都是指二进制数的位运算。
左移“<<”:
a<<m ,a和m必须是整型表达式,要求m>=0。
将整型数a按二进制位向左移动m位,高位移出后,低位补0。
右移“>>”:
a>>m,a和m必须是整型表达式,要求m>=0。
将整型数a按二进制位向右移动m位,低位移出后,高位补0,有符号数补符号位。
浮点型
表示形式 | 字节数及取值范围 |
---|---|
float | 4字节(3.4e-38~3.4e38) |
double | 8字节(1.7e-308~1.7e308) |
long double | 16字节(1.7e-308~1.7e308) |
单精度由float表示,双精度由double表示
- 浮点数溢出
上溢时,被赋予一个无穷大的值,printf函数显示的是inf。
浮点数下溢时,指数部分已经达到最小值,则将尾数部分进行右移,空出首位的二进制数,丢弃最后一位的二进制数。 - 浮点数不存在移位操作
字符型
表示形式 | 字节数及取值范围 |
---|---|
char | 2字节(-128~127) |
unsigned char | 2字节(0~255) |
除了以上基本数据类型,c语言中还有构造类型、指针类型和空类型。数组、结构体等都包含在构造类型中。
类型转换
- 强制类型转换
int a = (int)(3.11)//a=3
例1:
const char*c;
string s="1234";
c=s.c_str();//c的结果为1234
例2:
int i=0;
string s('test');
char str[10];
strcpy(str,c_str())
for(i=0;i<s.length();i++)
{
str[i]=s[i];
}
#include<stdlib.h>
char *numchars="1234";
int num=atoi(numberchars);//结果为1234
string s="1234";
int b=stoi(s);//结果为1234