野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 494171|回复: 967

【每日一题讲解】类型转换的用法

  [复制链接]
发表于 2013-11-26 01:05:32 | 显示全部楼层 |阅读模式
  1. int8 i = -1;
  2. uint16 t = i;
  3. printf("%d",t);

  4. A.0
  5. B.1
  6. C.255
  7. D.65535
复制代码
请回答问题后再看答案哦,否则 每日一题 就没有意义了。
答错的,讲一下 为什么 会答错 呗!
答案回复可见!!


这题目考的是类型转换
i 是 int8 类型的,赋值为 -1;

把此值给 uint16 类型的 变量 t ,结果就等于 (uint16)(-1) = 0xFFFF,即65535,答案为D
回复

使用道具 举报

 楼主| 发表于 2013-11-26 01:10:14 | 显示全部楼层

昨天题目的结果


【每日一题讲解】逗号表达式的用法 - 软件设计区 - 野火初学123论坛 http://www.firebbs.cn/forum.php?mod=viewthread&tid=1168&extra=page%3D1


QQ截图20131126002356.jpg
回复 支持 反对

使用道具 举报

发表于 2013-11-26 08:09:33 | 显示全部楼层
本帖最后由 JudeScorpio 于 2013-11-26 08:10 编辑

虽然很不情愿但是还是打错了:(
那就说一下
int i = -1;//1000 0001 -> 1111 1110 -> 1111 1111
uint t = i;//0000 0000 1111 1111 -> 2^8-1 = 255


回复 支持 1 反对 0

使用道具 举报

发表于 2013-11-26 09:10:42 | 显示全部楼层
抢沙发~我来顶楼主的
回复 支持 反对

使用道具 举报

发表于 2013-11-26 09:42:43 | 显示全部楼层
JudeScorpio 发表于 2013-11-26 08:09
虽然很不情愿但是还是打错了:(
那就说一下
int i = -1;//1000 0001 -> 1111 1110 -> 1111 1111

int8 ,其实我们题目表达的意思是 char
回复 支持 反对

使用道具 举报

发表于 2013-11-26 09:50:02 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-11-26 10:02:55 | 显示全部楼层
带符号的转成不带符号的
回复 支持 反对

使用道具 举报

发表于 2013-11-26 10:32:04 | 显示全部楼层
C语言学的实在不怎么样
回复 支持 反对

使用道具 举报

发表于 2013-11-26 11:06:05 | 显示全部楼层
int i = -1;//1000 0001 -> 1111 1110 -> 1111 1111
uint t = i;//0000 0000 1111 1111 -> 2^8-1 = 255
想法同此楼。。。。。。
回复 支持 反对

使用道具 举报

发表于 2013-11-26 11:09:41 | 显示全部楼层
火哥解释没看懂能详细一点么初学
回复 支持 反对

使用道具 举报

发表于 2013-11-26 11:10:22 | 显示全部楼层
火哥解释没看懂能详细一点么初学真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-11-26 11:11:40 | 显示全部楼层
火哥解释没看懂能详细一点么初学真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-11-26 11:12:35 | 显示全部楼层
STC89C52 发表于 2013-11-26 11:06
int i = -1;//1000 0001 -> 1111 1110 -> 1111 1111
uint t = i;//0000 0000 1111 1111 -> 2^8-1 = 255
想 ...

火哥答案没看懂。。。。。。。。。详细一点呗初学真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-11-26 12:04:57 | 显示全部楼层
真棒!!非常感谢真棒!!非常感谢真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-11-26 12:05:13 | 显示全部楼层
真棒!!非常感谢真棒!!非常感谢真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-11-26 12:15:47 | 显示全部楼层
STC89C52 发表于 2013-11-26 11:12
火哥答案没看懂。。。。。。。。。详细一点呗初学真棒!!非常感谢
  1. 题目是:
  2. int8 i = -1;
  3. uint16 t = i;
  4. printf("%d",t);
复制代码
uint16 (unsigned short int)类型的 t  = int8 (char) 类型的 i
识别到 i 的值 为 -1
那么 假如是 int16 (short int)类型 j = i, j 的值 也是 -1 。
但题目给的是 uint16 类型 t ,则 t 就等于 (uint16)(-1) ,也就是 0xFFFF ,即65535。


编译器 进行赋值操作,考虑的不是内存的二进制值,而是实际的 逻辑值。

举个简单的例子
uint8 i = 1;
float t = i;  这里不是简单的复制二进制值,而是进行逻辑转换,转换为 float 值为 1 的值

回复 支持 反对

使用道具 举报

发表于 2013-11-26 12:17:39 | 显示全部楼层
STC89C52 发表于 2013-11-26 11:06
int i = -1;//1000 0001 -> 1111 1110 -> 1111 1111
uint t = i;//0000 0000 1111 1111 -> 2^8-1 = 255
想 ...

编译器 处理 不同类型的赋值时,不是简单的 二进制值赋值。

你的思维已经理解为 单纯的二进制赋值。

回复 支持 反对

使用道具 举报

发表于 2013-11-26 12:18:29 | 显示全部楼层
xuetudou 发表于 2013-11-26 10:32
C语言学的实在不怎么样

每日一题,就是给大家补充C语言知识。

后面我们也会考虑加入 嵌入式相关的知识
回复 支持 反对

使用道具 举报

发表于 2013-11-26 12:19:24 | 显示全部楼层
♂荻夜 发表于 2013-11-26 10:02
带符号的转成不带符号的

还有不同 位数的。8位 转 16位
回复 支持 反对

使用道具 举报

发表于 2013-11-26 12:31:36 | 显示全部楼层
fire 发表于 2013-11-26 12:15
uint16 (unsigned short int)类型的 t  = int8 (char) 类型的 i
识别到 i 的值 为 -1
那么 假如是 int1 ...

谢谢火哥的这么详细耐心的讲解嘻嘻嘻弄懂了
回复 支持 反对

使用道具 举报

发表于 2013-11-26 12:31:56 | 显示全部楼层
fire 发表于 2013-11-26 12:15
uint16 (unsigned short int)类型的 t  = int8 (char) 类型的 i
识别到 i 的值 为 -1
那么 假如是 int1 ...

谢谢火哥的这么详细耐心的讲解嘻嘻嘻弄懂了
回复 支持 反对

使用道具 举报

发表于 2013-11-26 13:38:21 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-11-26 14:23:21 | 显示全部楼层
STC89C52 发表于 2013-11-26 12:31
谢谢火哥的这么详细耐心的讲解嘻嘻嘻弄懂了

呵呵,如果还有不懂的,可以发帖咨询。

如果有好的适合初学的资料,可以发到我们的论坛上
回复 支持 反对

使用道具 举报

发表于 2013-11-26 14:23:31 | 显示全部楼层
STC89C52 发表于 2013-11-26 12:31
谢谢火哥的这么详细耐心的讲解嘻嘻嘻弄懂了

呵呵,如果还有不懂的,可以发帖咨询。

如果有好的适合初学的资料,可以发到我们的论坛上
回复 支持 反对

使用道具 举报

发表于 2013-11-26 14:24:10 | 显示全部楼层
火哥资料,不得不顶啊
回复 支持 反对

使用道具 举报

发表于 2013-11-26 15:54:54 | 显示全部楼层
走过路过,不能错过求学
回复 支持 反对

使用道具 举报

发表于 2013-11-26 15:56:15 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-11-26 17:18:53 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-11-26 17:44:11 | 显示全部楼层
抢沙发~我来顶楼主的
回复 支持 反对

使用道具 举报

发表于 2013-11-26 18:26:05 | 显示全部楼层
fire 发表于 2013-11-26 12:18
每日一题,就是给大家补充C语言知识。

后面我们也会考虑加入 嵌入式相关的知识

赞!嵌入式可以有的!
回复 支持 反对

使用道具 举报

发表于 2013-11-26 19:18:09 | 显示全部楼层
好吧,又答错了
回复 支持 反对

使用道具 举报

发表于 2013-11-26 19:35:27 | 显示全部楼层
比妹子还漂亮,赞一个
回复 支持 反对

使用道具 举报

发表于 2013-11-26 19:58:16 | 显示全部楼层
C   看答案
回复 支持 反对

使用道具 举报

发表于 2013-11-26 20:47:17 | 显示全部楼层
答错了!!!
回复 支持 反对

使用道具 举报

发表于 2013-11-26 22:35:49 | 显示全部楼层
我答错了,看答案。。。
回复 支持 反对

使用道具 举报

发表于 2013-11-27 10:15:47 | 显示全部楼层
我猜选C
回复 支持 反对

使用道具 举报

发表于 2013-11-27 10:23:20 | 显示全部楼层
又做错了
回复 支持 反对

使用道具 举报

发表于 2013-11-27 15:34:27 | 显示全部楼层
好搞笑哦
回复 支持 反对

使用道具 举报

发表于 2013-11-28 10:44:21 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-11-28 10:59:03 | 显示全部楼层
我把u16改成u32(typedef unsigned long int u32)为什么输出结果是-1?而不是2的32次方-1
回复 支持 反对

使用道具 举报

发表于 2013-11-28 13:08:56 | 显示全部楼层
C!这次不会错了吧
回复 支持 反对

使用道具 举报

发表于 2013-11-28 20:34:11 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-11-29 00:42:54 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-12-1 12:30:24 | 显示全部楼层
这个做对了~
回复 支持 反对

使用道具 举报

发表于 2013-12-20 19:27:03 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-12-23 11:39:43 | 显示全部楼层
学习一下。。。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2013-12-24 11:25:15 | 显示全部楼层
这个真顶!顶!
回复 支持 反对

使用道具 举报

发表于 2013-12-27 13:24:57 | 显示全部楼层
输出十进制的数应该是1
回复 支持 反对

使用道具 举报

发表于 2013-12-27 13:25:20 | 显示全部楼层

RE: 【每日一题讲解】类型转换的用法

输出十进制的数应该是1
回复 支持 反对

使用道具 举报

发表于 2014-1-3 19:00:42 | 显示全部楼层
不会,还是看答案吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-23 21:00 , Processed in 0.073546 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表