你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求助两个C语言的问题

[复制链接]
lvpeng-1619958 提问时间:2018-7-24 17:12 /
本帖最后由 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?


收藏 评论10 发布时间:2018-7-24 17:12

举报

10个回答
zwjchinayids 回答时间:2018-7-24 17:55:04
第一题  报错  大写C未定义
第二题 异或后 是FF 不等于0   所以返回0

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

七哥 回答时间:2018-7-24 17:57:06
本帖最后由 toofree 于 2018-7-24 17:59 编辑

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


评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

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型(或指针类型),其他类型会有隐含类型转换的操作
  1. if((~a)==(-256))
  2.         printf("Equal\n");
  3.     else
  4.         printf("Not Equal\n");

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

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

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肯定溢出!!





评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

七哥 回答时间:2018-7-24 22:10:37
stm1024 发表于 2018-7-24 18:17
看样子,你用的是CodeBlocks?

是滴,CodeBlocks超级方便
CC4 回答时间:2018-7-25 00:06:30
toofree 发表于 2018-7-24 22:10
是滴,CodeBlocks超级方便

用这个来构建STM32的开发环境吗?
七哥 回答时间: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,基本都是用来写个小程序,验证点算法,转换点文件。
CC4 回答时间:2018-7-25 09:29:50
toofree 发表于 2018-7-25 01:05
不是用来开发STM32,单纯验证C
因为楼主的问题是C
TC、WinTC、VC6.0、CodeBlocks,基本都是用来写个小程序 ...

求跨平台,STM32开发环境构建方案  官方的SW4STM32 实在不好用呀
lvpeng-1619958 回答时间:2018-7-25 09:48:41
zwjchinayids 发表于 2018-7-24 17:55
第一题  报错  大写C未定义
第二题 异或后 是FF 不等于0   所以返回0


第一题大写修改为小写了
第二题是取反 不是异或哦

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版