高分!!!C语言菜鸟问题啊!!!!高分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/22 21:31:17
问题一
#include <stdio.h>
void main()
{
float x;
int i;
x=32767.0;
i=(int)x%3;
printf("x=%f,i=%d\n",x,i);
}
输出结果是 x=32767.000000,i=1
这个输出结果理论x的float的精度没这么高啊?因该是double才对,难道书

上写错了吗?

问题二
float x=1.10;
y=(char)x+1
printf y

请说出这个在内存中的2进制的运行过程...float怎么转成ascII码?还是用

法错误?我只是举个例子而已,强制转化类型都可以用么?简单介绍下

问题三(重点)

这个是关于不同类型的值附值给不同类型变量问题
1.将signed char 附值给 int 内存中的2进制符号扩展前面全变成1,书上

说目的是保持值的不变,哪不变了啊?
例如 代符号的char 内存中是11111110

附值给 int 就成了11111111 11111110 (书上写的值不变符号扩展)
这样才是值不变啊?10000000 11111110 (自己认为的值不变第1位是符号)
难道书上的意思是前面的1都是符号位?
现在只有第1个问题没懂了,谁让我理解分给谁吧

float精度应该是算有效数字位数吧???不是小数点后的个数,前面声明的x是float变量,精度怎么有32767.000000 11个有效数字????????????????除非声明x为double才可以啊???书上没印错吧?

1、float类型数据在输出时会显示到小数点后6位,但是有效数位只有7位,也就是从左向右第一个不为0的数字计算起7个有效数字,后面多余的0是因为%f的显示规定要显示到小数点后6位,double类型也会显示到小数点后6位,但是有效数位有15-16位,书上不是讲了吗,float类型数据在计算时会转换成double类型再计算(谭浩强的C程序设计)
2、ascII只能用字符型数据或整型数据表示,俩者的转换应该有一定的限制吧,或许浮点型转ascII会出错?或只是警告?没试过。。
3、将signed型的数提升为较长的signed型时,在增加的各个长度中各个位的状态与原来较短的数据中的符号位相同,即符号位为0时,新增加的位全置为0,否则全置为1。

问题1:任何常量数字比如100.79,300.44都是用double存储的。而%f也可以打印double类型,所以你明白吧。

问题2:这个根据不同编译器会有些许不同,但是一般,都是由计算机CPU中的浮点运算单元完成2进制的转换的。一般是取整数部分化为整数。

是的,包括指针都行,但是现在有些编译器限制了部分强制转换!比如double转换成void*就不行了在vc2005中。

问题3:孩子,char和int在计算机中都是用补码表示的,至于补码以自己到百科看看吧,书上说的没错呀!!!(int、char不是直接转化的2进制表示的哦)

另外singed char 第1位符号为0的2进制正值的附值给int呢?前面是全补0还是全补1?

看完补码,你就明白了。

1、float精度就是那么高,小数点后6位。double好像是小数点后15位到16位。
2.你的例子有问题。float怎么转成ascII码?答案是不能,字符型的才能转换成ascii码。强制转换通常只是在int float double等之间转,char很少见的。一般字符变量可以和int型进行运算,在这时字符就以它的ascii码运算。
3.char型在内存中占16个字节前8个1是符号 。

1.i=(int)x%3;是求余,余数是1,正确的啊。

2。强制转化类型都可以用。