找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于C语言逻辑运算的问题

查看数: 1837 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-12-8 16:24

正文摘要:

如图:已知PHASE_ADD=566(上一张帖子有这个完整的程序),当Index+add时,超过256怎么办?它这个时怎么运算的? 比如COS_temp = SINE_TABLE[300]时这时候已经超过了数组的最大值,请问这个怎么算的? 后面D ...

回复

ID:883242 发表于 2021-12-9 01:28
第294行不会出现越界,设index=236,那么index+64=44,绝不是你想象的index=300。
ID:979299 发表于 2021-12-8 22:26
看程序应是产生多相位正弦波的,0X8000和数组安位异或运算后给到DAC0和DAC1,用于转换数量
ID:624769 发表于 2021-12-8 22:05
当 变量为 char 型时 0xff +0x01 = 0x00  ,  0xff +0x02 = 0x01  ,    0xf0 +0x12 = 0x02, 以此类推。

数组索引比较特别, 编译器不同,芯片硬件不同往往结果会不同,最好自己做个试验,然后Ctrl +F5 看一下实际效果,超出数组边界一般会有多个可能。
当:数组  Temp[] 为 code 时, 当你超出定义范围时,可能会  越界,即假定你定义  数组Temp[100], Temp2[100], 当你引用 Temp[101] 时会去引用 Temp2[0];
当:数组  Temp[256] 为 pdata 时, 你引用 Temp[257] 他会回归引用 Temp[1];

各种情况各种分析,无法一概而论,受编译器影响,也受芯片硬件影响,最终还是自己 Ctril + F5 比较可靠。

DAC1与0X8000 的 异或 我在你上个帖子已经说了,就不再重复了。你自己可以查看一下。
ID:160500 发表于 2021-12-8 20:13
这个程序里不可能超过256,因为Index是一个 unsigned char类型的变量,它最大就是255。如果直接写COS_temp = SINE_TABLE[300],会出现错误,数组越界。看这个程序赋值语句它是把运算的值的低八位赋给Index。与0X8000异或最高位取反

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表