打印
[STM32F1]

函数返回值是多少?

[复制链接]
402|44
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pengf|  楼主 | 2022-10-16 11:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uint32  Systick_Config (uint32  ticks )
{
    if ( (ticks-1UL) >0xFFFFFFUL)
    {
       return 1UL;
    }
    return  0UL;
}

疑问,当ticks的值为0时,函数返回值是多少?

使用特权

评论回复
沙发
chenjunt| | 2022-10-16 11:09 | 只看该作者
什么意思?不是很明白你说的什么,能再解释一下这个现象吗

使用特权

评论回复
板凳
pengf|  楼主 | 2022-10-16 11:11 | 只看该作者
即 (ticks -1) 此时是以 -1来看呢?

使用特权

评论回复
地板
llljh| | 2022-10-16 11:13 | 只看该作者
还是以0xFFFFFFFF来看呢?

使用特权

评论回复
5
huangchui| | 2022-10-16 11:15 | 只看该作者
返回0UL

使用特权

评论回复
6
pengf|  楼主 | 2022-10-16 11:16 | 只看该作者
虽然可以马上去验证去实验,回答出上面的结果。但这其中的类型转换规律是什么?有什么规则支持?

使用特权

评论回复
7
wenfen| | 2022-10-16 11:18 | 只看该作者
假设上面的表达式中0xFFFFFFUL不加UL呢?又如何呢?

使用特权

评论回复
8
stly| | 2022-10-16 11:24 | 只看该作者
你再数数有多少个FF
if ( (ticks-1UL) >0xFFFFFFUL)

使用特权

评论回复
9
jiahy| | 2022-10-16 11:27 | 只看该作者
另外UL意思是这个数是无符号长整型

使用特权

评论回复
10
zwll| | 2022-10-16 11:29 | 只看该作者
已经指明是uint32 即无符号数,所以ticks-1UL仍然是正常,不存在-1情况。

使用特权

评论回复
11
dingy| | 2022-10-16 11:31 | 只看该作者
0xFFFFFFFF不加UL应该也是无符号数,因为前面是无符号数。

使用特权

评论回复
12
heweibig| | 2022-10-16 11:34 | 只看该作者
建议不要让编译器自动转换数据类型,还是写程序时指明比较好。

使用特权

评论回复
13
supernan| | 2022-10-16 11:35 | 只看该作者
编译器转换时,一般是往更大范围转,不损失数据内容为原则。

使用特权

评论回复
14
jlyuan| | 2022-10-16 11:37 | 只看该作者
0xFFFFFF是个啥概念,没交代明白
0~0xffffff都返回1

使用特权

评论回复
15
renyaq| | 2022-10-16 11:39 | 只看该作者
C里面有一个默认的规则集合来自动完成类型转换。其中有两条转换规则如下:
1.在包含两种数据类型的任何运算里,两个值都被转换成两种类型里面的较高级别。
2.类型级别从高到低的顺序是long double, double, float, unsigned long long, long long, long, unsigned int 和 int.

使用特权

评论回复
16
pangb| | 2022-10-16 11:45 | 只看该作者
所以你的例子的运算默认都会转为32位无符号运算。无符号就是没有负数了,0 - 1 = 0xFFFFFFFF

使用特权

评论回复
17
jiajs| | 2022-10-16 11:47 | 只看该作者
计算机里面有一个基础概念就是只有0和1. 内在里面存放着32个1, 你上层是有符号的类型就显示-1,无符号类型就显示0xFFFFFFFF

使用特权

评论回复
18
morrisk| | 2022-10-16 11:51 | 只看该作者
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

{

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

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

  return (1UL);

  }

使用特权

评论回复
19
llljh| | 2022-10-16 13:24 | 只看该作者
那是6*4BIT,24BIT啊,跟32BIT玩。

使用特权

评论回复
20
supernan| | 2022-10-16 13:27 | 只看该作者
可以读出来这个数,用二进制打印看看。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

718

主题

10129

帖子

3

粉丝