搜索
bottom↓
回复: 16

求教如果给P1,P2赋值负数,或超过8的数会有什么效果

[复制链接]

出0入0汤圆

发表于 2014-5-31 18:10:36 | 显示全部楼层 |阅读模式
比如0开始一直加一,或一直减一,有尽头吗?多少是尽头?实际keil中可赋值很大,0一直减一,接led循环,
keil中int的值最大是多少?为何int a; a=1000000000000000000;也可以编译通过?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入4汤圆

发表于 2014-5-31 18:54:41 | 显示全部楼层
有这功夫,自己去试验一下,结果早出来了

出0入0汤圆

发表于 2014-5-31 19:38:37 | 显示全部楼层
int是16位整数

出0入0汤圆

 楼主| 发表于 2014-5-31 20:00:53 | 显示全部楼层

为何int a; a=1000000000000000000;也可以编译通过?

出130入129汤圆

发表于 2014-5-31 20:06:33 | 显示全部楼层
这跟水桶装水一样,装满了就流出来了,最多也就装一桶水。

出0入0汤圆

发表于 2014-5-31 20:27:13 | 显示全部楼层
本帖最后由 michael.yang 于 2014-5-31 21:08 编辑

做编译器的哥们心里在骂:“为毛你犯了错,却要我来帮你擦屁股”。

出0入0汤圆

 楼主| 发表于 2014-5-31 23:09:01 | 显示全部楼层
68336016 发表于 2014-5-31 20:06
这跟水桶装水一样,装满了就流出来了,最多也就装一桶水。

转成汇编看到编译器不区分 int 和unsiged int 都是+-65535,超过后直接mov A到地址了,但给P1P2赋值语句输入P2=1111111时被当成二进制赋值过去了,P2=32423434242的时候时一个值,而且赋值可以无穷大,请问这个赋值和
编译器中的执行结果有什么关系?

出0入42汤圆

发表于 2014-6-1 09:04:58 | 显示全部楼层
编译器负责把数字转长转短, 至于怎么转, 自己去查C语言的类型转换.

但给P1P2赋值语句输入P2=1111111时被当成二进制赋值过去了, 你确认吗?

65535放到int或者u int, 在内存的内容并无变化,变化的是你的指令如何解读他们. 你把他解读为两个char都是没问题的

出0入0汤圆

发表于 2014-6-3 11:59:28 | 显示全部楼层
int 貌似范围在-3.2w ~ +3.2w之间吧???

出0入0汤圆

 楼主| 发表于 2014-6-8 04:02:40 | 显示全部楼层
albert_w 发表于 2014-6-1 09:04
编译器负责把数字转长转短, 至于怎么转, 自己去查C语言的类型转换.

但给P1P2赋值语句输入P2=1111111时被 ...

是的,keil v4, 只要11111111小于八位,就变成二进制方式,很大的数和负数是怎么转换成对应的P2 0~255的数的?

出0入0汤圆

发表于 2014-6-9 08:40:12 | 显示全部楼层
呵呵 楼主来逗大家玩的嘛

出0入0汤圆

发表于 2014-6-9 09:11:38 | 显示全部楼层
a=1000000000000000000,编译器是先把100000000000000.....转换成二进制数,再截取最右边的16位赋值给a。至于为什么编译器不提示有错,很简单,因本来就没错。

出0入0汤圆

发表于 2014-6-9 10:49:45 | 显示全部楼层
刚试了一下,我是KEIL UV5。C51的工程,编译可以通过,值是0X0100;ARM CM3的工程,编译也可以通过不过有警告,值是long long转int,是个负数。
见图如下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-6-10 07:59:05 | 显示全部楼层
12楼正解

出0入0汤圆

发表于 2014-6-10 09:40:21 | 显示全部楼层
本帖最后由 viq505 于 2014-6-10 09:47 编辑

这个问题我有经验,确实能编译通过。我曾经做过一个oled的屏显示温度,结果便已出现温度超过26.0度就会显示00.0,27.0就显示01.0(编译无错误),分析发现温度值数据类型定义的unsigned char型造成的,后将温度值数据类型定义为int型。问题解决。
不发链接了,你百度《可怕的26℃》就能找到我发的帖子(lcdhome论坛)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-6-10 20:17:35 | 显示全部楼层
本帖最后由 MCUStudent 于 2014-6-10 20:28 编辑
viq505 发表于 2014-6-10 09:40
这个问题我有经验,确实能编译通过。我曾经做过一个oled的屏显示温度,结果便已出现温度超过26.0度就会显示 ...


哈哈!原来我还有“同犯”,我几年前做了一个3208LED时钟带温度显示(DS18B20),应该是冬天或春天完成的。后来天气热了,发现有时温度只有几度,觉得不对,更换传感器无果,不得其解。又观察了一段时间发现只要超过25度才这样,因没想好是啥原因没有动它(程序都忘了存哪了),反正也不怎么用得着看温度,也就没当回事,也没和别人交流过,没事时抬头看见它就想两下。大约去年想到可能是定义变量的数据类型不对,也懒得弄(都好几年了)。今天见大侠提及此问题,我的判断得到了证实,凑个热闹。等哪天有时间把程序找找改过来。

出0入0汤圆

发表于 2014-6-10 20:22:07 | 显示全部楼层
MCUStudent 发表于 2014-6-10 20:17
哈哈!原来我还有“同犯”,我几年前做了一个3208LED时钟带温度显示(DS18B20),应该是冬天或春天完成的 ...

学习单片机还是要实践啊!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 12:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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