FPIS矿机
① 函数调用语句fseek(fp,-20L,2)的含义是什么
含义是把文件指针移动到末尾之前20个字节的位置,若文件大小小于20字节,函数调用会失败.
第三个参数写2不是很规范, 这里的2其实代表SEEK_END
② fp音乐术语是什么
fp表示强后突弱,全称为Forte Piano,弹奏时力度先强然后突然弱下,突弱的力度放在强的力度后面。
其他相关术语:
强弱:
1、渐弱(Diminuendo/dim)
2、最弱(Piano Pianissmo/ppp)
3、很弱(Pianissmo/pp)
4、弱(Piano/p)
5、中弱(Mezzo Piano/mp)
6、渐强(Crescendo/cresc)
7、中强(Mezzo Forte/mf)
调式:
1、调 modal
2、调式 modes,modality
3、调性 tonality
4、大调 natural major
5、小调 natural minor
6、转调 molation
(2)FPIS矿机扩展阅读
演奏技巧术语:
琶音(Arpeggio)
吐音(staccato)
连奏(legato)(缩写Leg)
断奏(Spiccato)
装饰音 (ornament)
颤音(trill)
震音(Tremolo)
柔弦(vibrato)
拨弦(pizzcato)
变格定弦(Scordatura)
③ 函数调用语句fseek(fp,-20L,2)的含义是什么
fseek
函数名: fseek
功能:重定位流上的文件指针
用法:int fseek(FILE *stream, long offset, int fromwhere);
程序例“”
#include <stdio.h>
long filesize(FILE *stream);
int main(void)
{
FILE *stream;
stream = fopen("MYFILE.TXT", "w+");
fprintf(stream, "This is a test");
printf("Filesize of MYFILE.TXT is %ld bytes ", filesize(stream));
fclose(stream);
length = ftell(stream);
fseek(stream, curpos, SEEK_SET);
函数实参
函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。例如: printf("%d",max(x,y)); 即是把max调用的返回值又作为printf函数的实参来使用的。在函数调用中还应该注意的一个问题是求值顺序的问题。
所谓求值顺序是指对实参表中各量是自左至右使用呢,还是自右至左使用。对此,各系统的规定不一定相同。介绍printf 函数时已提到过,这里从函数调用的角度再强调一下。
以上内容参考:网络-函数调用
④ 对函数调用语句fseek(fp,10,1)的含义
fseek
函数名: fseek
功 能: 重定位流上的文件指针
用 法: int fseek(FILE *stream, long offset, int fromwhere);
程序例:
#include <stdio.h>
long filesize(FILE *stream);
int main(void)
{
FILE *stream;
stream = fopen("MYFILE.TXT", "w+");
fprintf(stream, "This is a test");
printf("Filesize of MYFILE.TXT is %ld bytes\n", filesize(stream));
fclose(stream);
return 0;
}
long filesize(FILE *stream)
{
long curpos, length;
curpos = ftell(stream);
fseek(stream, 0L, SEEK_END);
length = ftell(stream);
fseek(stream, curpos, SEEK_SET);
return length;
}
int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针,offset为偏移,比如你要从文件的第10000个字节开始读取的话,offset就应该为10000,origin 为标志是从文件开始还是末尾。
origin 的取值:
SEEK_CUR Current position of file pointer
SEEK_END End of file
SEEK_SET Beginning of file
那么fseek(fp,-size,1)中-size和1是否应理解为,从文件倒说第一个文件开始读取
fseek最后一个参数最好不要直接指定一个数值,比如1,
要使用SEEK_CUR,SEEK_END,SEEK_SET
第二个参数表示相对于第三个参数的偏移,整数表示正向偏移,负数表示负向偏移,比如
fseek(fp,-size,SEEK_CUR);
从当前位置向文件后方(比如文件有123三个数字,那么2在三的后方,3在2的前方)
fseek(fp,size,SEEK_SET);
从文件开始位置向前移动size
这里默认size是正数
⑤ #define fp_is_neg(val) ((((uint8_t*)&val)[3] & 0x80) != 0),这个函数的功能是....
我们可以倒着推到
fp_is_neg(val)应该只有两种值 布尔类型的 0 或者 1,这一点从 最后 != 这个是个判等符号 ,优先级是最低的 也就是最后执行一个符号 。
(uint8_t*)&val : 其中 &val是取val的地址 (uint8 *)&val c语言是没有uint8的 应该是自己定义的数据类型 字面意思 是个无符号8位整型 typedef unsigned char uint8 或者#define uint8 unsigned char . (uint8 *)&val 把变量val的地址作为一个指针变量
再看这句 ((uint8_t*)&val)[3] 很容易理解了 把指针当数组首地址用,((uint8_t*)&val)[3] 是数组的第4个元素
(((uint8_t*)&val)[3] & 0x80) 用数组的第3个元素 和 0x80(一个十六进制数)按位与预算,0x80的二进制10000000这应该是一个掩码 把低7位掩盖这样就能判断最高位是 1还是0了
如果((uint8_t*)&val)[3]中的数据最高位是 0 ,由于 0=0所以0((((uint8_t*)&val)[3] & 0x80) != 0) 这条语句为假c语言规定假也就是false 语句的值是0 也就是fp_is_neg(val) ==0,反之fp_is_neg(val) ==1.
若果我说的不对 ,求高手指点