提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
一、数值溢出
概念:当一个数据类型超过它存储的范围就会发生数据溢出问题
二、混合赋值
1.短类型给到长类型
随便转;因为大的数据类型比小的数据类型范围要大。
double = int;int = short;short = char;
代码:
#include <stdio.h>
int main(int argc, const char *argv[])
{
int a = 10;
double b;
//短类型给长类型
b = a ;
printf("b = %f\n", b);
return 0;
}
结果:
2.整形转浮点型或者float转double
会导致精度丢失
float = double ; int= double;
3.长类型给到短类型
高位截断;
short = int; char = int;
#include <stdio.h>
int main(int argc, const char *argv[])
{
int a = 0x12345678;
short b = a ;
char c = a;
printf("a = %x\n",a);
printf("b = %x\n",b);
printf("c = %x\n",c);
return 0;
}
结果
4.无符号类型给到有符号类型
代码如下(示例):
int main(int argc, const char *argv[])
{
//无符号向有符号转换
unsigned char a = 0xff;
char b = a ;
printf("b = %d\n",b);
运算结果:
分析:最高位的数据位当成符号位进行计算,已知补码求源码,补码减1取反。
补码:1111 1111
减一:1111 1110
取反:1000 0001
结果:-1
5.有符号类型给到无符号类型
#include <stdio.h>
int main(int argc, const char *argv[])
//无符号的小类型数据向大类型数据进行转换
char a = -1;
unsigned int b = a;
printf("%#x\n",b);
printf("%d\n",b);
return 0;
}
运行结果是:
分析:
源码:1000 0001
反码:1111 1110
补码; 1111 1111
高位补符号位:0xffff ffff
使用%d打印:实际上是把负一的补码值 解读为了有符号的十进制 所以打印出来是-1
三、无符号数在运算时的陷阱
1.无符号与有符号的算数运算
#include <stdio.h>
void count_unsined()
{
int a = -10;
unsigned int b = 7;
if((a+b) > 0)
{
printf("a = %d \n",a);
printf("b = %d \n",b);
printf("is change\n");
}
else
{
printf("not change\n");
}
}
int main(int argc, const char *argv[])
{
count_unsined();
return 0;
}
}
总结:
这说明在c语言操作中,如果遇到无符号数与有符号数之间的操作,编译器会自动转化为无符号数来进行处理。这个也验证了有符号和无符号算术运算操作时会将有符号类型转换为无符号类型来计算。
2.无符号与有符号的比较运算
#include <stdio.h>
void count_unsined()
{
int a = -10;
unsigned int b = 7;
if((a+b) > 0)
{
printf("a = %d \n",a);
printf("b = %d \n",b);
printf("is change\n");
}
else
{
printf("not change\n");
}
}
int main(int argc, const char *argv[])
{
cmp_unsigned();
return 0;
}
}
总结:
这说明有符号数和无符号数进行比较运算时(==,<,>,<=,>=),有符号数隐式转换成了无符号数(即底层的补码不变,但是此数从有符号数变成了无符号数),此时的a的值远大于b。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。