整数与浮点数

整数:

1、用二进制补码表示;

2、c语言中整形常量有十进制,八进制,十六进制,Java中有二进制常量;

3、能精确表示;

4、能够精确运算。

示例:

1、整型常量
/*演示整型常量的各种形式*/
printf("23 = %d\n", 23);//十进制整数
printf("023 = %d\n", 023);//八进制整数
printf("0x23 = %d\n", 0x23);//十六进制整数
printf("0X23 = %d\n", 0X23);//十六进制整数
printf("23L = %ld\n", 23L); //十进制长整数
printf("23l = %ld\n", 23l);	//十进制长整数
printf("23u = %u\n", 23u);	//十进制无符号整数
printf("23U = %u\n", 23U);	//十进制无符号整数
printf("23UL = %u]n", 23UL);//十进制无符号长整数


2、除与取余
/*注意:不同的编译器有不同的处理,如gcc和vc不支持0作为分母,而TC和java支持*/
printf("3.0 / 0 = %f\n", 3.0 / 0);	//+ INF : 正无穷大
printf("-3.0 / 0 = %f\n", -3.0 / 0);//- INF : 负无穷大
printf("0 / 3.0 = %f\n", 0 / 3.0);	//0.0:正常除法
printf("0.0/0 = %f\n", 0.0 / 0);	//+ NAN :Not A Number
printf("-0.0/0 = %f\n", -0.0 / 0);	//- NAN :Not A Number


printf("3 / 2 = %d\n", 3 / 2);	//当两个操作数均为整数,/做整除
printf("3.0 / 2 = %f\n", 3.0);	//当至少有一个不为整数,/做浮点除
printf("3 %% 2 = %d\n", 3 % 2);	//%为求余运算,结果的符号与第一个操作的符号保持一致,结果的值为两数绝对值求余
printf("(-3) %% 2 = %d\n", (-3) % 2);
printf("3 %% (-2) = %d\n", 3 % (-2));
printf("(-3) %% (-2) = %d\n", (-3) % (-2));
3、字符常量
/*演示字符常量的各种形式*/
printf("%c", 'n');	//一般字符形式,可显示
printf("%c", '\n'); //转义字符:换行
printf("%c",'\r');	//转义字符:回车
printf("%c",'\b');	//转义字符:退格			
printf("%c",'\t');	//转义字符:制表符				
printf("%c",'\\');	//转义字符:\				
printf("%c",'\'');	//转义字符:'				
printf("%c",'\"');	//转义字符:"				
printf("%c",'\123');// \hhh:八进制格式,课1-3个h
printf("%c",'\x30');// \xhh:十六进制格式,可1-2个h	
4、测定数据类型长度
int i = 0;
printf("char:%d bytes\n",sizeof(char));
printf("short:%d bytes\n",sizeof(short));
printf("i:%d bytes\n",sizeof(i));
printf("long:%d bytes\n",sizeof(long));
printf("float:%d bytes\n",sizeof(float));
printf("double:%d bytes\n",sizeof(double));
printf("1.23456:%d bytes\n",sizeof(1.23456));
printf("double:%d bytes\n",sizeof(double));

char ca[20];
char* pc = ca;
printf("sizeof('a')=%d\n",sizeof('a'));//c语言中'a'是字符常量,内部作为int型来处理,gcc环境下,而vc环境下是1
printf("sizeof(char)=%d\n",sizeof(char));//char类型,在内存中占有一个字节
printf("sizeof(\"a\")=%d\n",sizeof("a"));//"a"是字符串,存储了字符'a'和串结束符'\0'两个字符
printf("sizeof(pc)=%d\n",sizeof(pc));//指针变量pc所占的内存字节数,64位环境下输出8
printf("sizeof(ca)=%d\n",sizeof(ca));//数字ca总的占的字节数,输出为20



5、数据范围
/*需要包含<limits.h>头文件*/
printf("signed char \t:%d bytes!\t[%d,%d]\n", sizeof(signed char), SCHAR_MIN, SCHAR_MAX);

printf("signed short \t:%d bytes!\t[%d,%d]\n", sizeof(signed int), SHRT_MIN, SHRT_MAX);

printf("signed int \t:%d bytes!\t[%d,%d]\n", sizeof(signed int), INT_MIN, INT_MAX);

printf("signed long int \t:%d bytes!\t[%d,%d]\n", sizeof(signed int), LONG_MIN, LONG_MAX);

printf("unsigned char \t:%d bytes!\t[0,%u]\n", sizeof(signed int), UCHAR_MAX);

printf("unsigned short \t:%d bytes!\t[0,%u]\n", sizeof(signed int), USHRT_MAX);

printf("unsigned int \t:%d bytes!\t[0,%u]\n", sizeof(signed int), UINT_MAX);

printf("unsigned long int \t:%d bytes!\t[0,%u]\n", sizeof(signed int), ULLONG_MAX);


浮点数:

1、用IEEE754标准存储表示;

2、c语言和 java语言中均有十六进制浮点数和十进制浮点数;

3、浮点数不能精确存储表示;

4、不能精确运算(大数吃小数;不同的运算顺序,结果不一样,例如:(a+b) +c 不一定等于 a+ (b+c) 不满足结合律 )

示例:

1、浮点数
/*演示浮点数的书写形式*/
//注意:形如0x1.0p+3的十六进制形式,Turbo c编译器并不支持,但gcc支持
printf("%lf\n", 3.5);	 //默认为双精度浮点数3.5
printf("%lf\n", 3.);	//3. = 3.0,缩写形式
printf("%lf\n", .5);	//.5 = 0.5,缩写形式
printf("%f\n", 3.5f);	//后缀f代表为单精度浮点数
printf("%f\n", 3.5F);	//后缀F代表为单精度浮点数

printf("%lf\n", 3.5e+2);	//3.5e+2 = 3.5 * 10^2
printf("%lf\n", 3.5e-2);	//3.5e-2 = 3.5 * 10^(-2)
printf("%lf\n", 3.5E+2);	//3.5E+2 = 3.5 * 10^2
printf("%lf\n", 3.5E-2);	//3.5E-2 = 3.5 * 10^(-2)
printf("%lf\n", .5e3);		//.5e3 = 0.5 * 10 ^ 3
printf("%lf\n", 3.5e2);		//3.5e2 = 3.5 * 10 ^2
printf("%lf\n", 0x1.0p+3);	//0x1.0p+3 = 0x1.0 * 2 ^3

/*C99中支持的十六进制浮点数*/
printf("%f\n",0xb.3p2);		// (11 + 3/16) * 4 = 44 + 3/4 = 44.75
2、大数吃小数
//一个很大的数与一个很小的数进行运算时,大数结果会忽略掉小数
printf("%.11f", 10000000000.0 + 0.000000001);

c语言中,带符号数和无符号数做运算时,会先将带符号的数转换为无符号数再运算。

unsigned int x = 1;
int y = -1;
if (x > y)	//带符号数与无符号数比较时,带符号数会被转成无符号数,再进行比较
{			//-1的补码为32个1,转变为无符号数,y就变为了2^32-1;自然比1大
	printf("Hello , world\n");
}
else
{
	printf("你好,世界!\n");
}
两个浮点数不能直接进行相等比较!(编译器不同结果也可能不同)

浮点数在计算过程中可能就会有精度损失

/*浮点数相等比较不能用==,一般用两数之差的绝对值小于一个很小的数来间接比较*/
double x, y, sum;
x = 0.1;
y = 0.2;
sum = 0.3;
if ((x + y) == sum)		//这里判断条件应该为sum - (x+y) < 10^(-10)
{
	printf("相等!\n");
}
else
{
	printf("不相等!\n");//输出不相等
}
posted @ 2022-04-09 10:37  宣哲  阅读(350)  评论(0编辑  收藏  举报