C語言的小演算法技巧

2021-07-11 07:37:46 字數 1565 閱讀 8434

以下是收集的,並且自己用到過的小技巧集錦,寫這個主要是因為,長時間不接觸,忘記了很多的小技巧了,等到自己再去使用的時候。。。。天哪,就是折磨人。所以,從這個post裡就開始收集下小「技巧」或者「小演算法」。但是,都是很些很簡單的東西,也會有複雜的東西。

我們都知道aes加密的過程中需要對進行列混合的運算。在程式設計實現的時候,有的人的列混合函式寫地比較冗長煩瑣,但是有點容易理解。在小夥伴的推薦下,看到了這個裡面的小技巧。當時是覺得有點難理解,但是理解過後,恍然大悟,覺得誰第乙個寫這個函式的人好聰明。以後如果可以碰到類似的矩陣操作可以按照這種思想去進行。

列混合的矩陣如下:⎡⎣

⎢⎢⎢02

0101

0303

0201

0101

0302

0101

010302⎤

⎦⎥⎥⎥

(4)

**如下:

#include

void mixcolumns (int intput[4][4],int output[4][4]);

int main()

}mixcolumns(intput,output);

printf("輸出列混合結果為:\n");

for(i=0;i<4;i++)

printf("\n");

}return0;}

//•的運算

//如果0xaf轉換成二進位制的第一位為1,則向左移位1位,並且和0x1b異或

//如果0xaf轉換成二進位制的第一位為0,則向左移位1位即可

unsigned

char xtime(unsigned

char input)

return temp;

}void mixcolumns (int intput[4][4],int output[4][4])}}

很明顯,這個技巧的核心就是在

output[i][j] = xtime(intput[i%4][j]) ^ (intput[(i+1)%4][j] ^ xtime(intput[(i+1)%4][j]))

^ intput[(i+2)%4][j]

^ intput[(i+3)%4][j];

解釋說明:

xtime(input[i%4][j]) ^ (intput[(i+1)%4][j] ^ xtime(intput[(i+1)%4][j]))

//此句是對0x02和0x03一起的操作,因為矩陣的規律就是0x02和0x03必左右相鄰,可以使用取餘的方式來讓0x02和0x03的操作放在一起進行,就會簡單很多

給的範例:

執行結果如下:

如果還是無法理解,可以根據那個矩陣代個值算下~

C語言中的小技巧

看看下面一段程式的功能 testrcunit.cpp 定義控制台應用程式的入口點。include typedef void cunit test case func type brief 測試用例鍊錶結點。儲存測試用例的函式指標和測試用例的名字。typedef struct tagcunittest...

C語言迴圈小技巧

寫 有兩類追求,一種是追求實用 coder 一種是追求 藝術 artist 我是那種追實用追膩了,偶然追一下藝術 就是偶然和藝術有一腿 的那種coder 很多人,已經習慣了for i 0 i n 又或者,有的人知道平方根的優化 int isprime int n 再或者,消除偶數 int ispri...

C語言的偏方 小技巧而已

在c語言的世界裡存在乙個關於結構體的偏門技巧,例如 struct str type str type str type用於儲存字串 我只是舉例,事實上這個結構體沒什麼用處 乍看上去str type只能儲存長度為 1的字串 0 但是,通過寫下如下的 你將突破這個限制 str len 5 str typ...