资源描述
1 .第一个C程序:
# include "stdio. h"/*该行是文件包含命令*/niain() {
printf ("test") ;/*函数调用:printf将内容输出到显示器*/}
注:C语言区分大小写;程序中必须含有一个且只有一个名字为main的主函数;
每行程序必须以〃;“结尾;/* ... */是注释内容。
2.引申例题:计算任意半径圆的面积和周长。
ftinclude "stdio. h"mciinO {
float r, 1, area;/*定义 float 类型变量*/scanf (飞f",&r);/*调用获取键盘输入函数*/
1 = 2*3.14*r;area = 3.14*r*r;
printf C\n l=%f, area=%f\n,z, 1, area);)
注:r, 1, area是float类型的变量,程序运行中可改变,float是c语言中的一种 数据类型。
3求两个数的和。
ttinclude "sldio. h"mciinO {
int i, j, sum;
int Add(int m, int n) ;/*声明函数*/
0,01,0,0
0, 1,0逻辑或运算符例子代码:
ttinclude “stdio. h"main() {
int m, n;
int k;
k=(m=0)||(m=l);或运算的计算规那么*/
printf ("%d, %d\n”, in, k);
k=(m=l) | | (m=0);
printf (“为d, %d\n”, m, k);
k=(m=2)||(m=l)||(m=0);算的规那么测试*/
printf ("与d,与d\n”, m, k);
m=0, k=0;
n=++m||++k;
printf ("%d, %d, %d\n”, k, m, n);
m=0, k=0;
n=++k||++m;
printf (*%d, %d, %d\n*, k, m, n);++m||++k+*/
}程序运行结果:
/*逻辑/*多层逻辑或运
/*测试表达式++k |++m与1, 1
1,12,1
0, 1, 11,0, 1
逻辑与和逻辑或混合运算例子代码:
#include “sldio. h" mainO {
int m, k;
/*表达式理解为(m=0) I I ((m=l )&&(m=2))*/
printf (,z%d, %d\n,,, rn, k); k=(m=2)||(m=0);(m=2)| ((m=l)&&(m=0))*/ printf ("%d, %d\n”, m, k); k=(m=2)&&(m=l) | | (m=0);
((m=2)&&(m=l))||(m=0)*/ printf (“为d, %d\n”, m, k); k=(m=0)&&(m=l) | | (m=2);((m=0)&&(m=1))||(m=2)*/ printf (“为d, %d\nz,, m, k);
/*表达式理解为
/*表达式理解为
/*表达式理解为
程序运行结果:
2,12,1
1,12, 1
4条件运算符和条件表达式4.1条件运算符〃?「是C语言中唯一的的三目运算符,优先级高于赋值运算
表达式语法:表达式1?表达式2:表达式3其执行顺序是:先求解表达式1,假设为1那么执行表达式2,否那么执行表达式3。
例子代码:
ttinclude "stdio. h"main() {
charch;
scanf ("枇",&ch);/*输入一个字符,赋给变量ch*/
ch=(ch>= AJ &&ch<=, Z') ? (ch+, a'」A'): ch;/* 当字符为大写字母时,将其变为小写字母*/
printf (,/\n%c,,» ch);)
5sizcof运算符5. Isizeof是C语言的一种单目运算符,运算对象是变量名、表达式或数据类型标 示符。功能是以字节形式给出操作数的存储大小。
5. 2语法格式:sizeof (表达式)或sizeof表达式 或sizeof (数据类型)6取地址运算符
6.1取地址运算符的运算对象只能是变量,运算结果为变量的存储地址。
7几种运算混合运用例子代码:
ttinclude "stdio. h"main() {
int x, y=l, z;
x= ((9+6)%5>=9%5+6%5) ?l:0;/*((9+6)%5> =9%5+6%5)等价于(((9+6) %5)>=(9%5 + 6%5))其值为 0*/
printf(* x=%d\n”,x);
y+=z=x+3;/* y+=z=x+3 等价z=x+3, y=y+z*/
printf(* y=%d\t z=%d\n”, y, z);
x=y=z=l;
-xa&++y| |z++;/*混合的逻辑与和逻辑或运算*/
printf C x=%d\t y=%d\t z=%d\n”, x,y,z);}
程序运行结果:
x=0
y=4z=3
x=0 y=l z=2摘自letthinking的专栏
c语言学习笔记(五)一顺序程序设计
1语句概述L1普通表达式语句:表达式后加分号就是•个表达式语句,语句与表达式不同, 是无值的,而表达式是有值的。
1.2流程控制语句:流程控制语句主要用来控制程序执行走向,以实现程序的各种 结构方式,它有特定的关键字等,主要分为分支和循环两种。
分支流程控制语句:if、switch0循环流程控制语句:for、while、do while。
1. 3跳转语句:跳转语句的作用主要是让程序从止常执行的走向中跳转到其它局部, 常见跳转语句如下间断语句:break、continue。
转向语句:goto。
Return 语句:return。
L4复合语句:由一些语句组成,放在一个大括号中形成一个整体,句型如下:
(语句1;
语句2:
语句n:
C语言语法规定,复合语句作为•条语句来处理。
例子代码:
ttinclude "stdio. h"main() {
int a=I1, b=21, c=31;
printf ("a=与d\tbKd\tc=%d\n”, a, b, c);
/*复合语句开始*/
/*复合语句结束*/
(int b=22;
float c=3. 3;
printf (,/a=%d\tb=%d\tc=%f\n/,, a, b, c);
a二 b;
}
printf (,/a=%d\tb=%d\tc=%d\n/,, a, b, c);)
输出结果如下:
a=l1 b=21 c=31a=ll b=22 c=3. 300000
a=22 b=21 c=31上面的代码可以和下面的代码比照运行:
ftinclude "stdio. h"ma in() {
int a=ll, b=21, c=31;
printf (/,a=%d\tb=%d\tc=%d\n,/, a, b, c);
{ int a=l;int b=22;
int b=22;
/*复合语句开始*/
float c=3. 3;
printf("a=%d\tb=%d\tc=%f\n”,a,b,c);
a=b;
/*复合语句结束*/
printf (,/a=%d\tb=%d\tc=%d\n,,, a, b, c);程序运行结果:
a=ll b=21 c=31a=l b=22 c=3. 300000
a=ll b=21 c=31可以看到,在复合语句中声明的变量只在复合语句中起作用。
1.5 空语句:空语句一般指只有一个分号占位,一般用在程序设计初期,表示待编 写的函数或代码。
1.6 各种语句整体介绍:
ttincludc "stdio. h"/*声明语句*/
/*控制语
/*复合
/*表达式语
/*声明语句*/
/*控制语
/*复合
/*表达式语
main() {
int a=10, b=20, c; if (b>a)句 */
{;语句 */
c=a+b;;句 */
/*函数调用语
printf (飞d”, c);
)
else
;/*空语句*/
}2库函数的调用与输入输出的关系
2.1 标准的库函数是存放在函数库中的,因此使用时必须要告知计算机,说明函数 库属于哪个库,此过程为函数的声明,例如:
ft include "math, h" /*标准数学函数的声明*/Main() { y=sin(x); /*库函数的调用*/
)Include是C语言中的特定字,是包含的意思,包含的文件一般为.h,称头文件。
2. 2在C语言中提供了一些输入输出的标准库函数,例如printf和scanf,使用时 必须将函数库的头文件stdio.h包含进程序中。
3格式化输出Iprintf函数:它的作用是向终端输出数据。
函数格式:printf ("格式控制语句:输出项1,输出项2);例如:printf("%f”,j);输出浮点类型的变量j, %f为控制符。
常见的格式控制符::
刎一十进制整型,%o一-八进制无符号整型,%f输出实数,%s一字符串,猊一输出 单个字符等。
4字符输出1字符输出可以利用putchar函数,在stdio. h中已经定义。
例子代码:
ftinclude "stdio. h"mciinO {
char a, b, c;
a=' C';
b=' A';
c='T';
putchar(a);
putchar(b);
putchar(c);
putchar (? \n );
putchar (J \10T );
putchar (* B');
putchar (J c );}
注:该函数不能输出两个或两个以I:的字符数据。
5格式化输入
5. Iscanf函数:作用是从键盘获取数据,格式化后再赋值给变量。
调用形式:scanf (格式控制语句,输入项);/*********************************************************************
6字符输入6. IgetchO和getcheO函数:功能都是读入一个字符。
两者的区别是:getch()函数不将读入的字符回显到屏幕上,getcheO却显示。
例子代码:
#include<stdio. h>ma i n()
char c, ch;c=getch();
/*从键盘上读入一个字符不回显送给字符变量c*/
ch=getche();/*从键盘上带回显的读入一个字
符送给字符变量ch*/putchar(c);
/*输出该字符*/putchar(ch);
6. 2getchar()函数:作用是从终端输入一个字符。getchar函数将空格符、制表符、和换行符都作为有效字符录入。
例子代码:
ftinclude "stdio. h"
scanf(*%d
sum = Add(i, j);/*调用函数*/
printf (^Xn sum=%d \n,,» sum);}
int Add(int m, int n) {/*函数*/
return m + n;}
注:scanf C%d %d", &i,&j);中的&是取地址运算符。
通过以上三个例子的总结:
1. 一个c语言源程序可以由一个或多个源文件组成,每个源文件可以由一个或多个 函数组成,一个源程序无论有多少个源文件或函数,都只能有一个且只能有一个 mian函数。
由引入的指令为预处理指令。
4常见语法规范。
标示符:程序中的变量名、函数名、标号等统称为标示符。C语言规定标示符只能 由字母、数字和下划线组成,并且第一个字符必须是字母或下划线。
1常见数据类型Int、short、long^ unsigned% float、double、char、enum、void、指针类型、数 组类型、struct、union 等。
基本数据类型:Int> short^ long、unsigned、float、double、char^ enum 都属 于基本类型。特点是其值不可再分。
2常量。
常量定义方式:fidofino标示符常量main ()
{ char cl,c2;
cl=getchar();
c2=getchar();
putchar(cl);
putchar(c2);}
***********************************************************************/7顺序程序设计
例一:计算一元二次方程的根。
代码:
#include "math, h”
main()
(
double a, b, c;
double xl,x2,p;
printf (z,pleaseinputa, b, c:");
scanfr%lf%lf%ir, &a, &b, &c);
printf('\n");
p=b*b-4*a*c;
*/
xl=(-b+sqrt (p))/(2*a);
x2=(-b-sqrt(p))/(2*a);
printf("xl=%f, x2=%f\n”, xl, x2);
}
例二:两位整数倒序。
/*声明系数*/
/*输入系数*/
/*P存放判别式的值
/*计算方程的根方
/*输出结果*/
代码:
ftinclude <stdio. h> mainO(
int m, n;
printfCinputm (10-99);
scanf("%d", &m);
printf('\n");
n=ifi%10;
m=n*10+m/10;
printf("m=%d'n”, m);}
c语言学习笔记(六)一分支程序设计
1使用if语句设计选择程序:if语句一般分为两种方式:单条件单分支、和单条 件双分支if语句。
1. 1单条件单分支的if语句一般语法:
If (表达式A){语句B;
语句执行流程:首先执行表达式A,如果表达式A的值非0,那么执行语句序列B,然 后流程继续往下执行。
例子代码:
ft include “stdio. h"mainO {
double score;printf("input the score:");
scanf&score);i f (score〉=60) /*成绩开始判断*/
printf (,/\npass!\n,/);printf (''programming is over!\n") ;/*和判断语句并列的下一条语句*/
}1.2单条件双分支的语法格式:
If (表达式A) {语句B;
}else{语句C;
)语句执行流程:首先执行表达式A的运算,如果表达式A的值非0,那么执行语句B, 条件不成立那么执行Co
例子代码:
i nclude "stdio. h"mainO
(double score;
printf(,zinput the score:");scanf (“机f”, &score);
if (score>=60) /*成绩开始判断*/printf ("\npass!\n") ;/*及格说明分支*/
elseprintf (*fail! \n");
printf (,zprogramming is over!\n") ;/*和判断语句并列的下一条语句*/ }2嵌套的if语句
2. 1嵌套常用格式:
第一种:
If(表达式){语句}
else if(表达式){语句}
第二种:
If(表达式){语句}
else if(表达式)语句
else语句
例子代码:
#include stdio. h#include "math, h”
void main(){int a;
scanf("%d", &a);
if(abs(a)<10)
printf (线dis one bit. \n",a);
else if(abs(a)<100)printf (",%dis two bit. \nz,, a);
else if(abs(a)<1000)printf(,z%dis three bit. \n",a);
else if(abs(a)<10000)printf (z,%d is four bit. \n", a);
else if(abs(a)<32767)
printf(w%dis five bit. \n",a);else
printf (,/thenumberistoolarge\n,z);3.用switch分支设计选择程序
3. 1语法形式:
Switch(表达式){case整型常量表达式1:语句;[break;]
case整型常量表达式1:语句;[break;]case整型常量表达式1:语句;[break;]
Ldefaul t]:语句;注:口里是可省略的。
3.2语句的执行流程:根据switch表达式的值,确定语句的执行入口,自上而下用 表达式的值与case的值比拟,相等就执行case后面的语句,如果语句结尾含有 break,就中断switch,否那么就继续执行下一个case,如果没有与表达式相匹配的 值,就执行default后的语句。
switch的表达式可以为任意类型,但运算结果必须是整型或字符型。
例子代码:
ttinclude "stdio. h"main()
{int score;
printf("score=");
scanf("兆d”, &scorc);switch((int) (score/10))/*整型量之间的除法,结果
仍为整型*/(
case 10:
case 9:printf (^YourgradeisA\n,/);break;
case 8:printf (/,YourgradeisB\n,/);break;
case 7:printf (/,YourgradeisC\n,/);break;
case 6:printf (z,YourgradeisD\n,z);break;
default:printf("YourgradeisE'n");switch语句也可以嵌套,break只能让程序跳出它所在的switch分支。
例如:
switch(nl) {
switch(n2) {;
)case 2:;
)4.分支程序设计实例
4.1 判断年份是否为闰年。
用include "stdio.h"mainO {
int year;printf(,zinput the year:");
scanf&year);if((year%4 == 0) && (year%100 != 0)) printf ("该年是闰年\n");
else if(year%400 == 0)printf ("该年是闰年\n");
elseprintf ("该年是平年\n");
}4. 2计算天数: ftinclude,zstdio. h"
main()(
int day, month, year, sum, leap;
printf ('Anplease input year, month, day\n,z);
scanf (,/%d%d%d,,> &year, &month, &day);
switch(month)/*先计算某月以前月份的总天数*/
(
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;brcak;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
)
sum=sum+day;
/*再加上某天的天数*/
if (year%400==01 I (year%4==0&&year%l00! =0))/*判断是不是闰年*/
leap=l;
else
leap=0;
if (leap-l&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf (,zIt is the %dth day. ”, sum);}
1循环语句1循环语句主要包括三种:while、do-while> for。
2while语句处理循环Iwhi le语句基本形式:
While (表达式){循环体语句}
2. 2执行流程:首先计算while表达式的值,当非零时执行循环体内的语句,执行 完之后继续判断while表达式的值,如果非零,继续执行循环体,直到表达式值为 零时,跳出循环,执行后续的语句。
例子代码:
<span style=,,font-size: 18px;include “stdio. h"main () {
int i, sum;
i=l;
sum=0;
while ( i<=100 )/*累加的数i小于或等于终止数n就循环累加,否那么结束循环*/
{ sum=sum+i;i++;
printf ("sum=%d\n”, sum);}</span>
注:使用sum和i时一定要赋初始值。
2. 3while语句使用注意:
循环体要是多条语句必须使用符合语句形式;在循环体表达式中一定要有控制循环趋向结束的语句,否那么循环将无限进行;循环体可为空;
2. 4whilc 实例:a+aa+aaa+....
代码:
<span style="zfont-size: 18px;include “stdio. h"main()
(
int a, x;
long sum=0, n=l, tn ;
sccinf &a, &x);
tn=a;
while(n<=x)/*n 超过 x 那么中止*/
{sum+=tn;
tn=tn*10+x;
n++;
)
printf(^result is %ld”, sum);}</span>
思考问题:求阶乘。
3do while语句处理循环常量分为:直接常量和符号常量。
例题:求任意圆的周长和面积,使用常量定义:n。
ttinclude "stdio. h"ftdefine PI 3.1415926
ma in() {float r,1,area;
scanf ("%f", &r);1 = 2*PI*r;
area = Pl*r*r;printf(*Xn l=%f area=%f \n”, 1, area);
)注:常量值不能被修改;习惯上常量名大写,变量名小写:
整型常量(整型):
1 .十进制整常数:0~9数字,无前缀等,也就是整常数。例如:237、-783、65535;.八进制正常数:以0为前缀,数值为0、7,八进制通常是无符号数。例如:023;
2 .十六进制整常数:前缀为0X或Ox,由0〜9, a~f或A~F组成(不区分大小写), 例如:0X23A、OXAA、OxFFFO;
3 .长整型常量:使用L或小写1作为后缀,例如:123L (十进制123)、0121 (八 进制10) > 0xl5L (十六进制 21)。
3. Ido while语句基本形式: do (循环体语句}while(表达式);
3. 2执行流程:先执行do后面的循环体,然后计算while里的表达式值,当值非零 时继续执行do的循环体,当值为零时,跳出循环。
例子代码:
<span style=wfont-size: 18px;include "stdio. h"main ()(
int i, sum;
i=2;
sum=0;
do
/*先执行循环*/
(
sum+=i;
i+=2;
)while(i<=100);/*判断条件*/
printf ("sum=/d\n”, sum );}</span>
3. 3while和do while的区别:就是while首先要判断while的表达式是否成立再 执行循环体,而do while是无论while的表达式是否成立,都会先执行一次do的 循环体。
4for语句处理循环4.1基本语法形式: for (表达式1;表达式2;表达式3)
循环体;注:for是C语言关键字,括号里的3个表达式可以是任意的表达式,当循环体内 有多条语句时,注意使用复合语句。
4. 2先计算表达式1,表达式1只执行一次,一般是赋值语句,用于初始化变量;然 后求解表达式2,假设值为零,那么退出循环,假设非零,那么执行循环体;接着执行表达 式3,然后继续判断表达式2,再执行循环体,直到表达式2不成立。
例子代码:
<span style="zfont-size: 18px;include “stdio. h"main()
(int i,sum;
sum=0;for( i=l; i<=100; i++)
sum+=i;printf("sum=%d”, sum);
}</span>3for语句的特点:表达式1、2、3都可以省略,但“;”分号不能省略;表达式 可以是任意形式的表达式;循环体可以为空;for的括号里可以使用多个控制循环 的变量。
判断素数例子代码:
<span style=,/font-size: 18px;include “stdio. h"^include "math, h”
mainO
(int n, m, flag;
flag=l;
为素数,否那么不是素数。初值为1*/
printf(,z\n enter n:");
scanf &n);
for(m=2;m<n&&flag;m++)
^include "math, h”
mainO
(int n, m, flag;
flag=l;
为素数,否那么不是素数。初值为1*/
printf(,z\n enter n:");
scanf &n);
for(m=2;m<n&&flag;m++)
除*/
if (n%m-0)
flag=0;
是素数*/
if(flag==l)
没有变化,那么为素数*/
printf (^\n%d is a prime number./,, n);
else
printf(^Xn %d is not a prime number. ”, n);
}</span>
/*flag变量为旗帜变量,值为1那么n
/*输入n*/
/*判断n能否被2〜n-1之间的数整
/*n不
/*假设flag的值
4思考问题:
1 .求阶乘。
2 .输出斐波那契数歹h.输出水仙花数。
3 .输出如下列图形:
*****
***
**
*5流程控制语句
有时我们在执行循环的过程中,可能需要在中途中断循环或者跳过本次循环,这时 我们就需要使用流程控制语句。
4. 1 break:在switch语句中我们常使用break用来跳出switch分支,其实break 同样也可以使用在循环语句中用来跳出循环。在循环中使用break让循环语句可以 有多个出口,使程序变的更加灵活。
break语句可以使循环在未到达结束条件时提前跳出循环。
例子代码:
for(i=0;i<10;i++){printfi);
if(i—O) break;}
思考问题:使用break语句修改判断素数问题。
5. 2continue:在循环过程中使用continue可以根据条件判断是否执行本次循环, 使用continue之后,后面的代码就不再执行,直接执行下次循环。但是不像break 既可以用在分支也可以用在循环中,continue只能用在循环结构中。
例子代码:
for(i=0;i<10;i++){
if (i==0) continue; /*当 i=0 时不执行循环*/
printfi);
)
思考练习:使用continue实现求1000内能被3、5、7整除的数。
,********************************************************************
6. 3goto:也叫无条件转向语句.
它的一般格式为:goto标号;
例子代码:
<span style=,/font-size: 18px;z/>#include <stdio. h>
main() {int i,s=0;
i=l;loop: if (i<=100) {/*标号,表示出goto语句转向的位置*/
s+=i;i++;
goto loop;printf("1+2+3+…100=%d\n”, s);
}</span>
在结构化程序设计中不提倡使用goto语句,但有时使用goto却比拟方便,比方在 一个多层的循环体中,要跳出到最外层的循环就要使用多个break,但使用got。直 接就可以实现******************************************************************************/
附录资料:不需要的可以自行删除SHA算法的实现
C语言程序:
#includc <iostrcam>
#include <vector> 〃定义 vector 数组
#include <string> 〃记录消息using namespace std;
const int NUM = 8; 〃一个字由32比特(或者8个16进制数) const int BIT = 512; 〃消息认证码要以512比特一组
〃字常量
string HO = ”67452301”;
string Hl 二"EFCDAB89”;
string H2 = "98BADCFE”;
string H3 = "10325476";
string H4 = "C3D2E1F0”;
〃定义SHA1(平安哈希算法)类
class SHA1
(
public:
〃将一个字符串形式的字转化为vector数组 vector<int> hex_inlo_dec(string word);
〃将vector转化为string字符串形式 string num_into_mcssagc(vcctor<int> A);
〃两个字X和Y的逻辑”和“
vector<int> word_AND(vector<int> A,vector<int> B);
//两个字X和Y的逻辑”或“
vector<int> word_OR(vector<int> A,vector<int> B);
〃两个字X和Y的逻辑“异或”
vector<int> word_XOR(vector<int> A,vector<int> B);
〃两个字X和Y的逻辑“补”
vector<int> word_COMPLEMENT(vector<int> A);
〃两个字X和Y的摸2八32整数加
vector<int> word_ADD(vector<int> A,vector<int> B);
〃将字X循环左移s个位置
vector<int> ROTL(vector<int> A,ini s);
//SHA-1的填充方案,我们设定msg由ASCII码组成
vector<vector<int> > SHA_l_PAD(string msg);
〃将SHA-1压成以字为单位
vector<vector<vector<int> > > compress(vector<vector<int> > result);
〃定义ft函数,每个ft函数都有B,C,D三个字作为输入,并产生一个字作 为输出
vector<int> Ft(int t,vector<int> B,vector<int> C,vector<int> D);
〃定义字常数K
vector<int> K(int t);
〃开始进行SHA-1(平安Hash算法)的加密
vector<vector<int> > SHA_1 (string msg);
〃将vector转化为string字符串形式
string SHAl::num_into_mcssage(vector<int> A) (
int i;
string msg =
for(i = 0;i < A.size();i++)
(if(A[i] >=0&&A[il <= 9)
msg += 'O' + AliJ;else if(A[il >= 10 && A[i] <= 15)
msg += 'A' + (A[i] - 10);
)
return msg;
〃将一个字符串形式的字转化为vector数组 vector<int> SHA1 ::hex_into_dec(string word) (
int i;
vector<int> result(NUM,O);
for(i = 0;i < NUM;i++)
(if(word[i] >= 'O' && word[i] <= '9')
(result[i] = word[i] - *0*;
)else if(wordfi] >= 'A1 && word[i] <= 'F)
(resultfil = 10 + wordfil - 'A';
)
)
return result;
I
//两个字X和Y的逻辑”和“
vector<int> SHA 1 ::word_AND(vector<int> A,vector<int> B) (
vector<int> result(NUM,O);
int i;
for(i = 0;i < NUM;i++)
|result[i]=A[i]&B[i];
)
return result;)
//两个字X和Y的逻辑”或“
vector<inl> SHA 1 ::word_OR(vector<int> A,vector<int> B) {
vector<int> result(NUM,O);
int i;
for(i = 0;i < NUM;i++)
return result;〃两个字X和Y的逻辑“异或”
vector<int> SHA 1 ::word_XOR(vector<int> A,vector<int> B) (
vector<int> result(NUM,O);
int i;
for(i = 0;i < NUM;i++)
(result[i] = A[i] A B[i];
}
return result;)
〃两个字X和Y的逻辑“补”
vector<int> SHA1 ::vvord_COMPLEMENT(vector<int> A) (
vector<int> result(NUM,O);
int i;
for(i = 0;i < NUM;i++)
(result[i] = 15-A[i];
I
return r
展开阅读全文