cityfuture 发表于 2014-5-31 18:10:36

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

比如0开始一直加一,或一直减一,有尽头吗?多少是尽头?实际keil中可赋值很大,0一直减一,接led循环,
keil中int的值最大是多少?为何int a; a=1000000000000000000;也可以编译通过?

ibichao 发表于 2014-5-31 18:54:41

有这功夫,自己去试验一下,结果早出来了

BG4RFF 发表于 2014-5-31 19:38:37

int是16位整数

cityfuture 发表于 2014-5-31 20:00:53

BG4RFF 发表于 2014-5-31 19:38
int是16位整数

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

68336016 发表于 2014-5-31 20:06:33

这跟水桶装水一样,装满了就流出来了,最多也就装一桶水。

michael.yang 发表于 2014-5-31 20:27:13

本帖最后由 michael.yang 于 2014-5-31 21:08 编辑

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

cityfuture 发表于 2014-5-31 23:09:01

68336016 发表于 2014-5-31 20:06
这跟水桶装水一样,装满了就流出来了,最多也就装一桶水。

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

albert_w 发表于 2014-6-1 09:04:58

编译器负责把数字转长转短, 至于怎么转, 自己去查C语言的类型转换.

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

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

lswhome 发表于 2014-6-3 11:59:28

int 貌似范围在-3.2w ~ +3.2w之间吧???

cityfuture 发表于 2014-6-8 04:02:40

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

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

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

yklstudent 发表于 2014-6-9 08:40:12

呵呵 楼主来逗大家玩的嘛

gmajvfhpa 发表于 2014-6-9 09:11:38

a=1000000000000000000,编译器是先把100000000000000.....转换成二进制数,再截取最右边的16位赋值给a。至于为什么编译器不提示有错,很简单,因本来就没错。

jzkn 发表于 2014-6-9 10:49:45

刚试了一下,我是KEIL UV5。C51的工程,编译可以通过,值是0X0100;ARM CM3的工程,编译也可以通过不过有警告,值是long long转int,是个负数。
见图如下

GZlonely 发表于 2014-6-10 07:59:05

12楼正解

viq505 发表于 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论坛)。

MCUStudent 发表于 2014-6-10 20:17:35

本帖最后由 MCUStudent 于 2014-6-10 20:28 编辑

viq505 发表于 2014-6-10 09:40
这个问题我有经验,确实能编译通过。我曾经做过一个oled的屏显示温度,结果便已出现温度超过26.0度就会显示 ...

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

viq505 发表于 2014-6-10 20:22:07

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

{:handshake:} 学习单片机还是要实践啊!
页: [1]
查看完整版本: 求教如果给P1,P2赋值负数,或超过8的数会有什么效果