易截截图软件、单文件、免安装、纯绿色、仅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++ 表达式求值顺序 未定义

表达式的副作用
运算符的优先级与结合性规定了表达式中相邻两个运算符的运算次序,但对于双目
运算的操作数,C++没有规定他们的计算次序。例如,对于表达式:
exp1 + exp2;
先计算 exp1 还是 exp2?不同的编译器有不同的做法。
在数学上,对于双目运算符,不论先计算哪一个操作数,要求最终计算结果一样。
在 C++ ......

用J2ME做基于手机的C/S模式游戏的流程

问题:用J2ME做基于手机的C/S模式游戏的流程
 查看该问题完整内容如果可以 请介绍下服务器和客户端等方便的内容回答:这些在百度上不好问,去CSDN问用什么语言做都是一样的,你用J2ME做自然是可能要在手机上用,看你要通过蓝牙还是GPRS,但是编程上本质区别不大,底层都是透明的。如何建立连接,通信这些应该明白吧, ......

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

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

hexdump s 0 n 52 C实例 helloworld

[root@localhost test]# hexdump -s 0 -n 52 -C helloworld
00000000  7f 45 4c 46 01 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  02 00 03 00 01 00 00 00  10 83 04 08 34 00 00 00  |............4...|
00000020  30 08 00 00 00 00 00 00  34 00 20 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号