找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1139|回复: 5
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主

如图:已知PHASE_ADD=566(上一张帖子有这个完整的程序),当Index+add时,超过256怎么办?它这个时怎么运算的?
比如COS_temp = SINE_TABLE[300]时这时候已经超过了数组的最大值,请问这个怎么算的?
后面DAC0和DAC1与0X8000异或是什么作用?请高手指点一下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:160500 发表于 2021-12-8 20:13 | 只看该作者
这个程序里不可能超过256,因为Index是一个 unsigned char类型的变量,它最大就是255。如果直接写COS_temp = SINE_TABLE[300],会出现错误,数组越界。看这个程序赋值语句它是把运算的值的低八位赋给Index。与0X8000异或最高位取反
回复

使用道具 举报

板凳
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:979299 发表于 2021-12-8 22:26 | 只看该作者
看程序应是产生多相位正弦波的,0X8000和数组安位异或运算后给到DAC0和DAC1,用于转换数量
回复

使用道具 举报

5#
ID:883242 发表于 2021-12-9 01:28 | 只看该作者
第294行不会出现越界,设index=236,那么index+64=44,绝不是你想象的index=300。
回复

使用道具 举报

6#
ID:450037 发表于 2021-12-9 09:57 | 只看该作者
188610329 发表于 2021-12-8 22:05
当 变量为 char 型时 0xff +0x01 = 0x00  ,  0xff +0x02 = 0x01  ,    0xf0 +0x12 = 0x02, 以此类推。

...


翻转是这样的吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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