易截截图软件、单文件、免安装、纯绿色、仅160KB

我的C实践(9):位和字节的重排

  位和字节的重排在密码学算法中有广泛的应用。
/* rearran.c:位和字节的重排 */
/* 位反转:以字的中心为对称点进行位反射
例如: abcd efgh ijkl mnop ABCD EFGH IJKL MNOP
位反转:PONM LKJI HGFE DCBA ponm lkji hgfe dcba */
unsigned rev(unsigned x){
/* 交换相邻的单个位 */
x=(x & 0x55555555)<<1 | (x & 0xaaaaaaaa)>>1;
/* 交换相邻的2位字段 */
x=(x & 0x33333333)<<2 | (x & 0xcccccccc)>>2;
/* 交换相邻的4位字段 */
x=(x & 0x0f0f0f0f)<<4 | (x & 0xf0f0f0f0)>>4;
/* 交换相邻的8位字段 */
x=(x & 0x00ff00ff)<<8 | (x & 0xff00ff00)>>8;
/* 交换相邻的16位字段 */
x=(x & 0x0000ffff)<<16 | (x & 0xffff0000)>>16;
return x;
}
/* 字节反转:以字的中心为对称点进行字节反射
例如: abcd efgh ijkl mnop ABCD EFGH IJKL MNOP
字节反转:IJKL MNOP ABCD EFGH ijkl mnop abcd efgh */
unsigned revw(unsigned x){
x=(x & 0x00ff00ff)<<8 | (x & 0xff00ff00)>>8;
x=(x & 0x0000ffff)<<16 | (x & 0xffff0000)>>16;
return x;
}
/* 位混洗:将右半字的各个位相间地插入到左半字中,尾部的位仍然保留在尾部
例如:abcd efgh ijkl mnop ABCD EFGH IJKL MNOP
混洗:aAbB cCdD eEfF gGhH iIjJ kKlL mMnN oOpP */
unsigned shuffling(unsigned x){
unsigned t;
/* 初始:abcd efgh ijkl mnop ABCD EFGH IJKL MNOP */
/* abcd efgh ABCD EFGH ijkl mnop IJKL MNOP */
t=(x ^ (x>>8)) & 0x0000ff00; x=x ^ t ^ (t<<8);
/* abcd ABCD efgh EFGH ijkl IJKL mnop MNOP */
t=(x ^ (x>>4)) & 0x00f000f0; x=x ^ t ^ (t<<4);
/* abAB cdCD efEf ghGH ijIJ klKL mnMN opOP */
t=(x ^ (x>>2)) & 0x0c0c0c0c; x=x ^ t ^ (t<<2);
/* aAbB cCdD eEfF gGhH iIjJ kKlL mMnN oOpP */
t=(x ^ (x>>1)) & 0x22222222; x=x ^ t ^ (t<<1);
return x;
}
/* 逆混洗 */
unsigned unshuffling(unsigned x){
/* 以相反的顺序进行交换即可实现逆混洗 */
t=(x ^ (x>>1)) & 0x22222222; x=x ^ t ^ (t<&


相关文档:

C/C++对MySQL操作

昨天晚上在看C/C++对数据库的操作,猛然间觉得十分亲切,因为其中很多函数都和PHP中对MySQL操作相同,这是才想起PHP是C演化而来的。经过一番捣腾,终于完成了一个简单的程序,但是仍然存在着一个严重的问题,就是从数据库中得到的结果在屏幕上显示的是乱码,很让人烦。还望高手们赐教!
1.在机器上装上MySQL ,假设安装在 C ......

C++中extern “C”含义深层探索

本文关键词: c++ 含义
1.引言
C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量 ......

堆栈、linux c程序存储空间布局的总结

栈主要用来存放局部变量, 传递参数, 存放函数的返回地址.esp 始终指向栈顶, 栈中的数据越多, esp的值越小.
堆用于存放动态分配的对象, 当你使用 malloc , new 等进行分配时,所得到的空间就在堆中. 动态分配得到的内存附带有分配信息, 所以你能够 realloc 和 free调它们.
全局,静态和常量是分配在数据区中的。数据区包括b ......

我的C实践(7):位计数

  位计数就是对一个数中具有某些特征的位进行计数。看下面实现:
/* bitscount.c:位计数 */
/* 计算x中1位的数目:方案1,采用分治策略 */
inline int pop(unsigned x){
/* 对每个2位字段,先析出其右端的1位,再析出其左端的1位,然后让这两个位相加 */
x=(x & 0x55555555)+((x>>1) & 0x555555 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号