c语言求模运算符的使用方法

c语言求模运算符的使用方法,第1张

取模运算符 (%)

一个表达式的值除以另一个表达式的值,并返回余数。

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语言求模运算符的使用方法、求一个高效的指数取模运算算法、怎样使用点阵液晶取模软件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9876718.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存