标题: 关于C语言逻辑运算的问题 [打印本页]

作者: zhangzhao2423    时间: 2021-12-8 16:24
标题: 关于C语言逻辑运算的问题

如图:已知PHASE_ADD=566(上一张帖子有这个完整的程序),当Index+add时,超过256怎么办?它这个时怎么运算的?
比如COS_temp = SINE_TABLE[300]时这时候已经超过了数组的最大值,请问这个怎么算的?
后面DAC0和DAC1与0X8000异或是什么作用?请高手指点一下

作者: liuzx66    时间: 2021-12-8 20:13
这个程序里不可能超过256,因为Index是一个 unsigned char类型的变量,它最大就是255。如果直接写COS_temp = SINE_TABLE[300],会出现错误,数组越界。看这个程序赋值语句它是把运算的值的低八位赋给Index。与0X8000异或最高位取反
作者: 188610329    时间: 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 的 异或 我在你上个帖子已经说了,就不再重复了。你自己可以查看一下。
作者: 兴安xa    时间: 2021-12-8 22:26
看程序应是产生多相位正弦波的,0X8000和数组安位异或运算后给到DAC0和DAC1,用于转换数量
作者: Hephaestus    时间: 2021-12-9 01:28
第294行不会出现越界,设index=236,那么index+64=44,绝不是你想象的index=300。
作者: zhangzhao2423    时间: 2021-12-9 09:57
188610329 发表于 2021-12-8 22:05
当 变量为 char 型时 0xff +0x01 = 0x00  ,  0xff +0x02 = 0x01  ,    0xf0 +0x12 = 0x02, 以此类推。

...


翻转是这样的吗?





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1