将K1M300,也就是M300,M301,M302,M303这4个位的数据右移15位
但是有一个原则,就是实际移动位数等于指定的移动次数除以指定的位数的余数。
在本例中,因为K1M300是4位,指定移动次数为15,因此实际移动的位数为15/4=3余3,实际移动3位。
也就是说,SFR K1M300 K15 实际是右移3位。
//对一行电文进行加密,每个字母转换为字母表中循环右移的第三个字母
//大写字母C加密后的ASCII码值为(c-62)%26+65
//小写字母C加密后的ASCII码值为(c-94)%26+97
#include<stdioh>
void main()
{
//定义数组a和b,以及控制变量i
char a[3];
char b[3];
int i;
//提示输入三个字母
printf("请输入三个字母不要用空格隔开\n");
//用for循环控制接受字母
for(i=0;i<3;i++)
scanf("%c",&a[i]);
//在下一循环前加入该句
printf("经加密后为:");
//用for循环计算加密后的字母的ASCII值
for(i=0;i<=2;i++)
{
if(a[i]>=97)
b[i]=(a[i]-94)%26+97;
if(a[i]>=65&&a[i]<97)
b[i]=(a[i]-62)%26+65;
//输出结果
printf("%c",b[i]);
}
printf("\n");
}
先说第一个问题:
比如用查表法将结果保存到变量i中,查表变量为x,则i=table[x],记住c语言里面数组是从0开始的,比如说上面的0x01就是table[0],0x02是table[1],以此类推。
再说第二个问题:
比如说从p10口发送出去,则可以写为
sbitout=p1^0;//定义out为p10口,这样今后好写程序
chari;
for(i=0;i<8;i++)
{
out=data&0x80;//因为高位在前,将它写成二进制就明白了
data<<=1;
}
上面的程序就能搞定了;
应该是所有的单片机都有cy位(不知道浮点dsp有没有);
c语言中左移和右移之后低位或高位自动补零,cy位也保持为零(视编译器而定,这个得看编译器手册),有些编译器提供了循环移位的函数;
还有什么不明白的补充问题就是
以上就是关于三菱Q系列PLC梯形图程序中[ SFR K1M300 K15 ]是什么意思还望高手指点,急!!全部的内容,包括:三菱Q系列PLC梯形图程序中[ SFR K1M300 K15 ]是什么意思还望高手指点,急!!、C语言的程序设计 电文加密,每个字母转换为字母表中循环右移的第三个字母。、单片机 移位 *** 作 右移 C语言等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)