lzh电子论坛

欢迎来到lzh电子论坛:
如果您对电子技术感兴趣就加入我们吧!在这里互相交流互相学习!主要讨论的方向有:单片机,ARM,PCB板设计,FPGA,汇编,C/C++等方面。
-----lzh电子论坛
lzhbbs.top-me.com
lzh电子论坛

电子的道路是孤独的,要懂得左手温暖右手,要懂得把debug当作快乐去欣赏,去享受,那样你才会成功...

欢迎访问lzh电子论坛。可通过【谷歌,SOSO,搜狗】搜索“lzh电子论坛”直接进入论坛。点击了解论坛详细制度


    在IAR中char型变量能等于负数吗???

    分享
    avatar
    滴迪
    初级会员
    初级会员

    帖子数 : 18
    威望 : 0
    注册日期 : 13-01-16
    地点 : 湖北理工学院

    在IAR中char型变量能等于负数吗???

    帖子 由 滴迪 于 2013-05-23, 7:30 pm

    今天用IAR调试发现一个让人很难理解的问题,我把51里面的程序移植到430里面,竟然发现430里面char型变量与于-1作比较时出现警告,后来将该变量改为signed char型竟然通过了,真的无法理解,51里面不是这样的啊!!!况且不是说char型就是signed char吗?在网上查了一下,网上说char可视为signed char或者unsigned char,但char和signed char,unsigned char并不是同一类型,并且char 有一个默认值,到底这个默认值是 signed char 还是 unsigned char
    这个要编译器的实现,真的不解啊!!!!!!!!!!
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 25

    回复: 在IAR中char型变量能等于负数吗???

    帖子 由 Admin 于 2013-05-23, 7:57 pm

    滴迪 写道::今天用IAR调试发现一个让人很难理解的问题,我把51里面的程序移植到430里面,竟然发现430里面char型变量与于-1作比较时出现警告,后来将该变量改为signed char型竟然通过了,真的无法理解,51里面不是这样的啊!!!况且不是说char型就是signed char吗?在网上查了一下,网上说char可视为signed char或者unsigned char,但char和signed char,unsigned char并不是同一类型,并且char 有一个默认值,到底这个默认值是 signed char 还是 unsigned char 这个要编译器的实现,真的不解啊!!!!!!!!!!
    每个编译器都有不同规则吧,c语言中char是signed char吧!出现警告不要紧,主要看与-1比较结果是不是对的啊。
    avatar
    滴迪
    初级会员
    初级会员

    帖子数 : 18
    威望 : 0
    注册日期 : 13-01-16
    地点 : 湖北理工学院

    ……………………

    帖子 由 滴迪 于 2013-05-23, 8:00 pm

    Admin 写道::
    滴迪 写道::今天用IAR调试发现一个让人很难理解的问题,我把51里面的程序移植到430里面,竟然发现430里面char型变量与于-1作比较时出现警告,后来将该变量改为signed char型竟然通过了,真的无法理解,51里面不是这样的啊!!!况且不是说char型就是signed char吗?在网上查了一下,网上说char可视为signed char或者unsigned char,但char和signed char,unsigned char并不是同一类型,并且char 有一个默认值,到底这个默认值是 signed char 还是 unsigned char 这个要编译器的实现,真的不解啊!!!!!!!!!!
    每个编译器都有不同规则吧,c语言中char是signed char吧!出现警告不要紧,主要看与-1比较结果是不是对的啊。
    我只能说不是对的啊
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 25

    回复: 在IAR中char型变量能等于负数吗???

    帖子 由 Admin 于 2013-05-23, 9:24 pm

    这个问题值得考虑额,好久没动IAR了,你定义一个char型的变量赋值为1,然后减去2,用仿真看看结果是多少啊,,,期待你的结果!!!
    avatar
    滴迪
    初级会员
    初级会员

    帖子数 : 18
    威望 : 0
    注册日期 : 13-01-16
    地点 : 湖北理工学院

    '' (0xFF)

    帖子 由 滴迪 于 2013-05-23, 9:29 pm

    Admin 写道::这个问题值得考虑额,好久没动IAR了,你定义一个char型的变量赋值为1,然后减去2,用仿真看看结果是多少啊,,,期待你的结果!!!
    结果是 '' (0xFF)
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 25

    回复: 在IAR中char型变量能等于负数吗???

    帖子 由 Admin 于 2013-05-23, 10:04 pm

    滴迪 写道::
    Admin 写道::这个问题值得考虑额,好久没动IAR了,你定义一个char型的变量赋值为1,然后减去2,用仿真看看结果是多少啊,,,期待你的结果!!!
    结果是 '' (0xFF)

    事实证明看来真的得加signed了 Like a Star @ heaven 学习了,以前定义的时候都是加了signed的,还真没试过不加会是什么样的。
    avatar
    mcusb
    中级会员
    中级会员

    帖子数 : 46
    威望 : 3
    注册日期 : 13-01-28

    回复: 在IAR中char型变量能等于负数吗???

    帖子 由 mcusb 于 2013-05-24, 5:42 pm

    还有这个情况啊,,,没想过这个!!!见识了....
    avatar
    li460135301
    论坛版主
    论坛版主

    帖子数 : 14
    威望 : 3
    注册日期 : 12-11-23
    年龄 : 27
    地点 : 上海

    回复: 在IAR中char型变量能等于负数吗???

    帖子 由 li460135301 于 2013-07-11, 5:27 pm

    在标准C中,char变量的有效位只有7位,也就是说标准C中char是没有正负这一说的,即使是有效值,也只有正数。char变量是最高位的第8位作为什么用途是编译器自己决定的,也就是不同的编译器出现的效果可能不一样!甚至有些编译器发现第8位为1是得到的数据是乱码,或者说提出警告!
        最好的做法是,当使用插入变量时,最好不要使用它的最高位,只是用7为有效位,这是可移植性C的最好处理方法,有些时候编译器自己定义的情况我们要尽可能避免,使用标准C明确定义的情况来编程。当你确实要处理8位数据时,最准确的做法是声明unsigned char或者signed char 或者用更大范围的类型


    _________________
    欢迎交流:http://blog.163.com/lichao_elec/
    风沙星辰,永远相伴......
    avatar
    zz蓝sea
    初级会员
    初级会员

    帖子数 : 1
    威望 : 0
    注册日期 : 13-07-13

    回复: 在IAR中char型变量能等于负数吗???

    帖子 由 zz蓝sea 于 2013-09-10, 10:36 pm

    每个编译器都会对变量类型进行优化,如果加上不优化就会对的unvolatile http://bbs.csdn.net/topics/60169778

      目前的日期/时间是2018-04-25, 6:48 am