[应用相关] 函数返回值是多少?

[复制链接]
 楼主| pengf 发表于 2020-9-8 20:31 | 显示全部楼层 |阅读模式
uint32  Systick_Config (uint32  ticks )
{
    if ( (ticks-1UL) >0xFFFFFFUL)
    {
       return 1UL;
    }
    return  0UL;
}

疑问,当ticks的值为0时,函数返回值是多少?
zhuww 发表于 2020-9-8 20:34 | 显示全部楼层

什么意思?不是很明白你说的什么,能再解释一下这个现象吗
 楼主| pengf 发表于 2020-9-8 20:40 | 显示全部楼层
即 (ticks -1) 此时是以 -1来看呢?
llljh 发表于 2020-9-8 20:43 | 显示全部楼层
还是以0xFFFFFFFF来看呢?
chenjun89 发表于 2020-9-8 20:43 来自手机 | 显示全部楼层
返回0UL
 楼主| pengf 发表于 2020-9-8 20:46 | 显示全部楼层
虽然可以马上去验证去实验,回答出上面的结果。但这其中的类型转换规律是什么?有什么规则支持?
zyf部长 发表于 2020-9-8 20:49 | 显示全部楼层
假设上面的表达式中0xFFFFFFUL不加UL呢?又如何呢?
hanwe 发表于 2020-9-8 20:54 | 显示全部楼层
你再数数有多少个FF
if ( (ticks-1UL) >0xFFFFFFUL)
wangpe 发表于 2020-9-8 20:59 | 显示全部楼层
另外UL意思是这个数是无符号长整型
langgq 发表于 2020-9-8 21:03 | 显示全部楼层
已经指明是uint32 即无符号数,所以ticks-1UL仍然是正常,不存在-1情况。
zhanglli 发表于 2020-9-8 21:08 | 显示全部楼层
0xFFFFFFFF不加UL应该也是无符号数,因为前面是无符号数。
huanghuac 发表于 2020-9-8 21:12 | 显示全部楼层
建议不要让编译器自动转换数据类型,还是写程序时指明比较好。
wenfen 发表于 2020-9-8 21:15 | 显示全部楼层
编译器转换时,一般是往更大范围转,不损失数据内容为原则。
chenho 发表于 2020-9-8 21:20 | 显示全部楼层
0xFFFFFF是个啥概念,没交代明白
0~0xffffff都返回1
dingy 发表于 2020-9-8 21:24 | 显示全部楼层
C里面有一个默认的规则集合来自动完成类型转换。其中有两条转换规则如下:
1.在包含两种数据类型的任何运算里,两个值都被转换成两种类型里面的较高级别。
2.类型级别从高到低的顺序是long double, double, float, unsigned long long, long long, long, unsigned int 和 int.
liuzaiy 发表于 2020-9-8 21:27 | 显示全部楼层
所以你的例子的运算默认都会转为32位无符号运算。无符号就是没有负数了,0 - 1 = 0xFFFFFFFF
chenjunt 发表于 2020-9-8 21:31 | 显示全部楼层
计算机里面有一个基础概念就是只有0和1. 内在里面存放着32个1, 你上层是有符号的类型就显示-1,无符号类型就显示0xFFFFFFFF
morrisk 发表于 2020-9-8 21:36 | 显示全部楼层
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

{

// 不可能的重装载值,超出范围

if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {

  return (1UL);

  }
hanwe 发表于 2020-9-8 21:47 | 显示全部楼层
那是6*4BIT,24BIT啊,跟32BIT玩。
wangzsa 发表于 2020-9-8 21:51 | 显示全部楼层
可以读出来这个数,用二进制打印看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

718

主题

10129

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部