lvpeng-1619958 发表于 2018-7-24 17:12:16

求助两个C语言的问题

本帖最后由 lvpeng-1619958 于 2018-7-25 09:47 编辑

1:
uint8_t a = 1,c;int8_t b = -1;c= a/b,结果是c = ?是多少啊?2:uint8_t a = 0xff;uint8_t b = 0;if((~a) == b){return 1;}else{return 0}在32bit系统当中,到底是return 1还是return 0?

zwjchinayids 发表于 2018-7-24 17:55:04

第一题报错大写C未定义
第二题 异或后 是FF 不等于0   所以返回0

toofree 发表于 2018-7-24 17:57:06

本帖最后由 toofree 于 2018-7-24 17:59 编辑

跑个程序就可以了呀,在这纠结?
可能不同的编译器,会有不同的结果吧,我这是GCC



stm1024 发表于 2018-7-24 18:17:28

toofree 发表于 2018-7-24 17:57
跑个程序就可以了呀,在这纠结?
可能不同的编译器,会有不同的结果吧,我这是GCC



看样子,你用的是CodeBlocks?

stm1024 发表于 2018-7-24 18:34:19

本帖最后由 stm1024 于 2018-7-24 18:39 编辑

第二个问题,应该是0。C语言中,所有的比较运算符,操作数都是使用的int型(或指针类型),其他类型会有隐含类型转换的操作if((~a)==(-256))
      printf("Equal\n");
    else
      printf("Not Equal\n");

    uint32_t c=4294967040;
    if((~a)==c)
      printf("Equal\n");
    else
      printf("Not Equal\n");上面这两段代码,都会显示Equal,因为最终转化为32位int的时候,都是0xffffff00。

wenyangzeng 发表于 2018-7-24 19:33:15

本帖最后由 wenyangzeng 于 2018-7-24 21:17 编辑

楼主写代码应该严谨一点:C不等于c呀!
退一步,改c为C,

则:
uint8_t a = 1,C;

这里的a和C是无符号,而b是负数:

则C= a/b,商是负数,uint8_t C肯定溢出!!





toofree 发表于 2018-7-24 22:10:37

stm1024 发表于 2018-7-24 18:17
看样子,你用的是CodeBlocks?

是滴,CodeBlocks超级方便

select326 发表于 2018-7-25 00:06:30

toofree 发表于 2018-7-24 22:10
是滴,CodeBlocks超级方便

用这个来构建STM32的开发环境吗?

toofree 发表于 2018-7-25 01:05:03

本帖最后由 toofree 于 2018-7-25 01:07 编辑

select326 发表于 2018-7-25 00:06
用这个来构建STM32的开发环境吗?
不是用来开发STM32,单纯验证C
因为楼主的问题是C
TC、WinTC、VC6.0、CodeBlocks,基本都是用来写个小程序,验证点算法,转换点文件。

select326 发表于 2018-7-25 09:29:50

toofree 发表于 2018-7-25 01:05
不是用来开发STM32,单纯验证C
因为楼主的问题是C
TC、WinTC、VC6.0、CodeBlocks,基本都是用来写个小程序 ...

求跨平台,STM32开发环境构建方案官方的SW4STM32 实在不好用呀
页: [1] 2
查看完整版本: 求助两个C语言的问题