C语言菜鸟问题,在线给分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

来源:百度知道 编辑:UC知道 时间:2024/05/23 19:35:35
问题一
unsiged int(2进制第1位是是1) 附值给 unsiged long
符号补完第扩展是全扩0还是全扩1?

问题二
float 53.65 转化成 char 怎么转???书上习题答案上写的char值是'5'?

问题三
a=12
a+=a-=a*=a

经过运算后a的值,书上答案是0,我怎么算出来是-120哪算错了?
看我的步骤:12*12=144 12-144=-132 12+(-132)=-120
答案0怎么得出来的???书上写错了??答案??
问题四!!!!!!!!!!!!!!!!!!!!!!!看这个问题四!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
那么float 转换成 char 在内存中二进制是怎么转换的???
如果float是11.01或者999.99呢,强制转换成char 2进制是多少???第1个带小数也没益出,第2个数舍去小数也益出了,这个是只取2进制中间那部分吧?还要不超过128?具体转换的规则??

问题一: 0
问题二:可以这样理解,float转换为int后舍去小数位为53,而"5"的ASCII码正好是53,所以转化为char后的值是"5";
问题三:表达式可看作a+=(a-=(a*=a));
第一步,a*=a就是a=a*a=12*12=144(注意此时变量a的值修改为144了),
第二步,a-=(a*a)即为a-=144;所以a=a-144=144-144=0(注意此时变量a的值修改为0了);
第三步,a+=(a-=(a*a)),即为a+=0;所以a==0了,呵呵!

1)全扩展0
2)char a[] = "53.65"; //第二题给得不是很清晰,只能才你提问的意思了.如果你是要将任意的一个浮点数放到字符数组里的话,需要编写个算法了.还有就是强制类型转换了,这个估计不是你的意思吧!( float flt = 53.65;char ch = (char)flt;)
3)12*12=144,这时候变量a是144,所以后面一步你计算错了,应该是144-144=0,最后a=0+0所以a还是0.
您真慷慨,其实不用给分也会回答您的,这样的问题是举手之劳!

flyinwoods:用unsigned是和操作系统无关的,所以肯定是全扩展零。只有int由于符号位的存在,才可能会有扩0和扩1这两种可能性。

问题一: 全扩0.
问题二: float a = 53.65;
char b = (char) a;
b的值是'5'.
问题三: a+=(a-=(a*=a)) = a+=(a-=144) = a+=(144-=144) = a+=0 = 0+=0 = 0
每一步运算,a的值都会有所变化的,不要总是用原值。

第一题没看懂,
第二题要用到 IEEE 754 标准
你可以用这段代码查查浮点在内存中的数据
float a = 53.65;
int c;
c = *(int *)&a;