把int 65535转换为char的结果是?int 99转为 float ,为什么我得的结果是0.000000? unsigned int 为65535 分别赋值给in...

C\u8bed\u8a00\u4e2d\uff0c\u5982\u4f55\u628a\u7ed3\u679cint\u8f6c\u5316\u4e3afloat\uff0c\u4ee55\u4e3a\u4f8b\uff1f

#include
int main(int argc, char *argv[])
{
int i=5;
printf("%f",float(i));
return 0;
}\u8fdb\u884c\u4e00\u6b21\u5f3a\u5236\u8f6c\u6362\u5c31ok

C\u8bed\u8a00int\u8303\u56f4\u4e0e\u5e73\u53f0\u6709\u5173\uff0c\u4e0d\u540c\u5e73\u53f0\u8303\u56f4\u53ef\u80fd\u4e0d\u540c\u6709\u7684\u662f16\u4f4d\uff0c\u6709\u7684\u662f32\u4f4d\uff0c\u5982\u679c\u521a\u5de7\u4f60\u90a3\u4e2a\u5e73\u53f0int\u8303\u56f4\u6bd4\u8f83\u592732\u4f4d\uff0c\u4f60\u8d4b\u503c\u8fc7\u53bb\u5c31\u8fd8\u662f\u539f\u503c65535\uff08\u5728\u53ef\u8868\u793a\u8303\u56f4\u5185\uff09\uff1b\u5426\u5219\u5982\u679c\u662f16\u4f4d\u7684\u5f53\u7136\u5c31\u662f-1\u4e86\u3002

\u8d4b\u503c\u7ed9float\u5e94\u8be5\u8fd8\u662f\u539f\u503c\uff0cfloat\u8303\u56f4\u6bd4\u8f83\u5927\u3002

int 65535转换为char的结果是 -1, 原因是char只有 1 byte 大小,装不下65535,丢弃了一部分数字,余下的 1 byte 解释为补码。
printf("%f\n",(float) a); 要用强制转换。a 是 int, 要用%d 格式输出。
---
#include <stdio.h>
void main()
{
int a=65535;
float f;
char c;
unsigned char u;
c = (char) a; // 这是有符号char 型,结果为 -1
u = (unsigned char) a; // 如果用无符号char 型,结果为 255
printf("c=%d \n",c);
printf("u=%d \n",u);
a=99;
printf("a=%f ",(float)a); // 强制转换为 float 型
}

you can't change the type of a variable is this way....
the correct one is
printf("%f\n",(float)a);

1、char的内存装不下那么大的int,char与int的关系根据ascii对照,强制赋值的话会切掉内存,变成不知道什么东西,这个跟编译器也有关

2、正确转换格式如楼上
因为int与float虽然存储大小一样,但是计算方式不一样,float有一部分内存用来存储计算浮点数,所以当你把int看做float打印的时候,有一部分的内存被看做了小数,99这个整数比较小,转成两进制是1100011,一个int有4byte也就是32bit全部用来存储整数,99这个数只有4位1其余全部为0,所以当你把它看做float打印的时候。就会出现0这种结果。

扩展阅读:trefi设置65535坏处 ... int最大值为啥是65535 ... unsigned int 65535 ... 0-65535是怎么算出来的 ... 为什么trefi设置65535 ... cm转换in计算器 ... plc dint的最大值65535 ... 系统中65535是零点吗 ... 65535怎么转成 1 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网