取模运算符 (%)
一个表达式的值除以另一个表达式的值,并返回余数。
number1 % number2
参数
number1任何整数表达式。
number2任何整数表达式。
备注
取模或余数运算符用 number2 除 number1 并只返回余数。 结果中的符号与 number1 的符号相同。 结果值在 0 和 number2 的绝对值之间。
示例
下面的示例阐释取模运算符的一种用法。
int myMoney=128;
int cookiePrice= 33;
int change;
int numCookies;
change=myMoney % cookiePrice;
numCookies=Mathround((myMoney-change)/cookiePrice);
由于一个整数的指数结果很大,可能远远超出计算机处理范围,故必须简化计算方式.这里采用快速取模方法原理为:在4的5次方运算中,5能够化作22+1,这是因为5的2进制数为101.所以4的5次方运算便能写作((4)^21)^24,其中1表示的是4的0次方,^2表平方.再运用模的性质:(ab)mod(m)=(amod(m)bmod(m))mod(m),所以(4^5)mod(m)可先化为(((4)^21)^24)mod(m),再化为(((4)^2mod(m)1)^2mod(m)4)mod(m).举例子--(4^5)mod(3)=(((4)^21)^24)mod(3)=((11)^2mod(3)4)mod(3)=(14)mod(3)=1.该函数运行方式取于上述算法思想,首先将幂分解成2进制数,得到一个从幂的最低位数开始01组成的栈:分解b为2进制数.记录下分解成的位数z,构造栈
for(;b!=1;b>>=1)
{
z++;
if(b%2==0) l[z]=0;
else l[z]=1;}
然后出栈进行"(a^b)mod(c)"的运算.这里用栈的原因是为了使幂的2进制数排列倒过来,实现最高位上的2进制数能够循环它的位数次,最低位上的2进制数只循环一次.每次的循环得到平方取模的值,一直到结束,取得一个值,即(a^b)mod(c).
for(;z>0;z--)
{
if(l[z]) y=(ya%c)(ya%c)%c;
else y=yy%c;
}
if(l[0]) y=(ya%c);//最后次模
return y;
这是一个比较快的运算方法
完整源程序:
//指数取模:a的b次方modc=x
_int64 mod(_int64 a,_int64 b,_int64 c)//(a)^bmod(c)//条件1:在rsa中a<c,其它不用a<c条件2:ac互素
{
_int64 l[500],z=-1,y;
for(;b!=1;b>>=1)//分解b为2进制数.记录下分解成的位数z,构造栈l
{
z++;
if(b%2==0) l[z]=0;
else l[z]=1;
}
//a%=c;//如果一开始数就很大,先模一次,防止过大, 求逆
y=aa%c;//第一次模
for(;z>0;z--)
{
if(l[z]) y=(ya%c)(ya%c)%c;
else y=yy%c;
}
if(l[0]) y=(ya%c);//最后次模
return y;
}
C#改写的,在vsnet 2005下调试通过:
/// <summary>
/// 指数取模:x=(a^b)%c (a的b次方mod)
/// 条件1:在rsa中a<c,其它不用a<c
/// 条件2:ac互素
/// </summary>
private static long mod(long a, long b, long c)
{
long[] l = new long[500];
long z = -1, y;
for (; b != 1; b >>= 1)//分解b为2进制数.记录下分解成的位数z,构造栈l
{
z++;
if (b % 2 == 0)
l[z] = 0;
else
l[z] = 1;
}
//a%=c;//如果一开始数就很大,先模一次,防止过大, 求逆
y = a a % c;//第一次模
for (; z > 0; z--)
{
if (l[z]>0) y = (y a % c) (y a % c) % c;
else y = y y % c;
}
if (l[0]>0) y = (y a % c);//最后次模
return y;
} (参考百度)
你下一个12864取模软件,
然后用普通的修改照片的工具就可以修改分辨率了(addse或者PS都可以),
将分辨率修改为128:64然后保存为BMP文件,用取模软件加载,得到图模。然后用画图程序显示OK
////////////////////////////////////////////////////////////////////////
// Bitmap点阵数据表 //
// 内容为:南京舟芯电子,TEL025-66085988 //
// 尺寸: 128 64 //
/////////////////////////////////////////////////////////////////////////
unsigned char logo[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xF2,0xF2,0x12,0xB2,0xF2,0xD2,
0x9F,0x9F,0xD2,0xF2,0xB2,0x12,0xF2,0xF2,0x02,0x00,0x02,0x02,0x02,0xF2,0xF2,0x12,
0x12,0x13,0x13,0x12,0x12,0xF2,0xF2,0x02,0x02,0x02,0x00,0x40,0x40,0x40,0xFE,0xFE,
0x43,0x4B,0x7A,0x72,0x42,0x42,0xFE,0xFE,0x40,0x40,0x40,0x00,0x02,0x02,0x02,0x02,
0x0F,0x8F,0x92,0x32,0x62,0x42,0x0F,0x0F,0x82,0x82,0x02,0x02,0x00,0x00,0x00,0xFC,
0xFC,0x44,0x44,0x44,0xFF,0xFF,0x44,0x44,0x44,0xFC,0xFC,0x00,0x00,0x00,0x40,0x41,
0x41,0x41,0x41,0x41,0x41,0xF1,0xF1,0x59,0x4D,0x47,0x43,0x41,0x40,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x04,0x04,0x04,0x04,
0x3F,0x3F,0x04,0x04,0x24,0x64,0x7F,0x3F,0x00,0x00,0x00,0x20,0x30,0x1D,0x0D,0x21,
0x61,0x7F,0x3F,0x01,0x01,0x05,0x0D,0x38,0x30,0x00,0x00,0x40,0x60,0x38,0x1F,0x07,
0x00,0x01,0x07,0x06,0x20,0x60,0x7F,0x3F,0x00,0x00,0x00,0x00,0x08,0x0C,0x07,0x03,
0x00,0x1F,0x3F,0x20,0x20,0x20,0x20,0x38,0x38,0x01,0x07,0x06,0x00,0x00,0x00,0x0F,
0x0F,0x04,0x04,0x04,0x3F,0x7F,0x44,0x44,0x44,0x4F,0x4F,0x78,0x78,0x00,0x00,0x00,
0x00,0x00,0x00,0x20,0x60,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x60,0x60,0xE0,0xE0,0x60,0x60,0x00,0x20,0xE0,0xE0,0x20,0x60,0x60,0x00,0x20,0xE0,
0xE0,0x20,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xE0,0xF0,0x10,0xF0,0xE0,0x00,0x00,0x60,0x70,0x10,0xF0,0xE0,0x00,0x00,
0xF0,0xF0,0x90,0x90,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,
0x90,0xB0,0x20,0x00,0x00,0xE0,0xF0,0x90,0xB0,0x20,0x00,0x00,0xE0,0xF0,0x10,0xF0,
0xE0,0x00,0x00,0x60,0xF0,0x90,0xF0,0x60,0x00,0x00,0xF0,0xF0,0x90,0x90,0x10,0x00,
0x00,0xE0,0xF0,0x10,0xF0,0xE0,0x00,0x00,0x60,0xF0,0x90,0xF0,0x60,0x00,0x00,0x60,
0xF0,0x90,0xF0,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,0x08,0x0F,0x0F,0x09,0x0D,0x0C,0x00,0x08,0x0F,
0x0F,0x08,0x0C,0x0C,0x00,0x00,0x0D,0x0D,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x07,0x0F,0x08,0x0F,0x07,0x00,0x00,0x0C,0x0E,0x0B,0x09,0x08,0x00,0x00,
0x04,0x0C,0x08,0x0F,0x07,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x07,0x0F,
0x08,0x0F,0x07,0x00,0x00,0x07,0x0F,0x08,0x0F,0x07,0x00,0x00,0x07,0x0F,0x08,0x0F,
0x07,0x00,0x00,0x07,0x0F,0x08,0x0F,0x07,0x00,0x00,0x04,0x0C,0x08,0x0F,0x07,0x00,
0x00,0x04,0x0D,0x09,0x0F,0x07,0x00,0x00,0x07,0x0F,0x08,0x0F,0x07,0x00,0x00,0x07,
0x0F,0x08,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/////////////////////////////////////////////////////////
//显示ZXET logo
///////////////////////////////////////////////////////////
digitalWrite(CS1,1); //先显示左半屏
digitalWrite(CS2,0);
for(yg=0;yg<8;yg++)
{
x=yg+0xb8;
y=0x40;
LcdCommandWrite(x); //写入y轴坐标
LcdCommandWrite(y); //写入x轴坐标
tmp=2yg64;
for(i=0;i<64;i++)
{
LcdDataWrite(logo[tmp]);
tmp++;
}
}
LcdCommandWrite(0x3f); //此处无需延迟直接接右半屏显示程序
////////////////////////
digitalWrite(CS1,0); //显示右半屏
digitalWrite(CS2,1);
for(yg=0;yg<8;yg++)
{
x=yg+0xb8;
y=0x40;
LcdCommandWrite(x); //写入y轴坐标
LcdCommandWrite(y); //写入x轴坐标
tmp=(2yg+1)64;
for(i=0;i<64;i++)
{
LcdDataWrite(logo[tmp]);
tmp++;
}
}
LcdCommandWrite(0x3f);
delay(3000);
///////////////////////////////////////////////////////////////
不清楚你的“取模”是什么意思。
黑色为0x0000,白色为0xffff 你设 灰度 颜色范围 为 unsigned short int 就可以了。
RGB 转 灰色, 计算式 为:
Y = 02126R + 07152G + 00722B
你想扩展为 0xffff,乘一个比例系数就可以了。这个程序你可以自己写。
============
另一种思路 是把 RGB 转 HSL 颜色体系,然后 把 H 抽出来,把它 放大到 0x0000 - 0xffff 就可以了。变回来时,另设 S=10 L=05 就可以了。 H 的均匀变化 是彩虹。
============
软件,你一定要软件,可以用 MATLAB 和它的 图像处理工具箱。
============
我的 RGB 转 HSL,HSL 转 RGB 程序:
(规1化的程序,直接放大就满足你的要求)
// nomorized
void RGB2HSL (unsigned char rr, unsigned char gg, unsigned char bb, double h, double s, double L)
{
double r,g,b;
double v,m,vm,r2,g2,b2;
r = (double) rr / 2550;
g = (double) gg / 2550;
b = (double) bb / 2550;
h = 0; s = 0; L = 0;
v = r; if (g > v) v = g; if (b > v) v = b; //get max
m = r; if (g < m) m = g; if (b < m) m = b; //get min
L = (m + v) / 20; // init L
if ( v == m) {
h = 0; s = 0;
} else {
double d,e=00;
if (g < b) e=60;
d = v - m;
if (L > 05) {s=d /(20 - v - m); } else { s= d /(v + m);};
if (r == v) {
h = (g-b)/d+e;
} else if (g == v){
h=(b-r)/d +20;
} else if (b==v){
h = (r-g) / d + 40;
}
h /=6;
};
}
// 程序作者:金色潜鸟(L_o_o_n_i_e)
void HSL2RGB(double h, double s, double L,unsigned char rr, unsigned char gg, unsigned char bb)
{
double v,m,sv, vs0, c1, c2,xiaoshu;
double r,g,b;
int ih;
r = L; g = L;b = L;
if (L <= 05) v = L (10 + s); else v = L + s - L s;
if (v > 0)
{
m = L + L - v;
sv = (v - m ) / v;
h = h 60;
ih = (int)h;
xiaoshu = h - ih;
vs0 = v sv xiaoshu;
c1 = m + vs0;
c2 = v - vs0;
switch (ih)
{
case 0: r = v; g = c1; b = m; break;
case 1: r = c2; g = v; b = m; break;
case 2: r = m; g = v; b = c1; break;
case 3: r = m; g = c2; b = v; break;
case 4: r = c1; g = m; b = v; break;
case 5: r = v; g = m; b = c2; break;
}
}
rr = (int) (r 0xff);
gg = (int) (g 0xff);
bb = (int) (b 0xff);
}
以上就是关于c语言求模运算符的使用方法全部的内容,包括:c语言求模运算符的使用方法、求一个高效的指数取模运算算法、怎样使用点阵液晶取模软件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)