The 一点是计算和数字通信中最基本的信息单位。实际上,所有运营商主要基于位操作也被称为按位运算在计算机编程中按位运算在位串、位数组或二进制数字(视为位串)的单个位、1和0的级别上操作。逐位运算是高级算术运算的基础,它是一个快速而简单的操作,因为它直接受到处理器的支持。大多数按位操作都是以两个操作数的指令表示的,其中结果替换其中一个输入操作数。
由于计算机微体系结构的所有这些基础知识,了解位运算符非常重要。C编程语言是最古老的编程语言之一,有很多操作数,其他编程语言中的操作符都是从该语言中获得灵感的。C和C++有相同的操作符,而且在其他编程语言中大多数操作符都是相同的。在这方面,我们已经很好地解释了操作员的一般情况学习如何在C中使用运算符++之前发布。现在,让我们看看比特移位和编码-解码示例。
在本文中,您将了解最快的数据编码和解码方法;如何使用最快的方法保护数据;如何使用移位对数据进行编码或解码,以及如何对字符串或二进制数据使用移位。通过学习更多关于位移位的知识,它将帮助您使用C++集成开发环境.
比特移位数据
位操作数之一是比特移位,的左移位带有“<<'操作数右移‘>>'操作数。位操作是机器代码和C++中最快的操作,因为计算机的微体系结构如上所述。有很多编码和解码方法,还有散列编码方法。比特移位数据是最简单、最快的编码方法之一。我们可以使用这种方法对数据文件进行编码和解码。
左换档和右换档
例如,如果c是char,我们可以如下编码和解码这个char,
|
c(c) = c(c) << 1; //左位移位编码 c(c) = c(c) >> 1; //右移位译码 |
这在小于127个字符的情况下效果很好。当换挡时,我们丢失了前沿位(当向左换挡时我们丢失了左侧位,当向右换挡时丢失了右侧位)。要在二进制数据中保存所有这些位,我们应该这样做循环比特移位,
循环左移和循环右移
如果我们使用循环位移位,在对数据进行编码或解码时,我们从不丢失任何比特。如果我们想从最多8位移位2位,我们可以按如下方式进行左右循环移位,
|
c(c) =(c(c) << 2)|(c(c) >> (8 - 2); //循环左2位移位编码 c(c) =(c(c) >> 2)|(c(c) << (8 - 2); //循环右移2位译码 |
复杂的循环左移和循环右移
例如,我们可以通过添加(1+i%7)来增加移位次数的复杂性,
|
c(c) =(c(c) << (1+我%7))|(c(c) >> (8 - (1+我%7)); //复杂循环左移位编码 c(c) =(c(c) >> (1+我%7))|(c(c) << (8 - (1+我%7)); //复杂循环右移位译码 |
位移位数据文件
例如,我们可以使用这种移位方法编码和解码数据文件如下例所示,
1 2 三 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
#包括<iostream> #包括<fstream> #包含<cstdlib> #包括<string> 整数 主要的() { 未签名的 烧焦 c(c); //标准::位集<8>x; 未签名的 整数 我=0; 标准::文件流 印度达牌手表; 标准::文件输出流 输出数据; //将mytest.txt编码为mytest.data // --------------------------------------------------------- 印度达牌手表.打开(“D:\\mytest.txt”, 标准::湾流::二元的); 如果(!印度达牌手表) { 标准::塞尔 << “错误:无法打开输入文件\n”;; 出口(1); } 输出数据.打开(“D:\\mytest.dat”, 标准::fstream(流)::二元的); 如果(!输出数据) { 标准偏差::塞尔 << “错误:无法打开输出文件\n”;; 出口(1); } 标准::cout公司 << “\n正在编码..\n”; 我=0; 虽然 ( !印度达牌手表.电动势() ) { c(c)=印度达牌手表.得到(); //获取数据的下一个字符或indata.get(); //c=c<<1;//左位移位编码 c(c) =(c(c) << (1+我%7))|(c(c) >> (8 - (1+我%7))); //复杂循环左移编码 输出数据.放(c(c)); //输出编码字符 标准::cout公司 << c(c); 我++; } 印度达牌手表.关闭(); 输出数据.关闭(); //将mytest.dat解码为mytest2.txt // --------------------------------------------------------- 印度达牌手表.打开(“D:\\mytest.dat”, 标准::fstream(流)::二元的); 如果(!印度达牌手表) { 标准::塞勒 << “错误:无法打开输入文件\n”;; 出口(1); } 输出数据.打开(“D:\\mytest2.txt”, 标准::fstream(流)::二元的); 如果(!输出数据) { 标准::塞尔 << “错误:无法打开输出文件\n”;; 出口(1); } 我=0; 标准偏差::cout公司 << “\n解码..\n”; 虽然 ( !印度达牌手表.电动势() ) { c(c)= 印度达牌手表.得到(); //获取下一个数据字符 //c=c>>1;//右移位译码 c(c) =(c(c) >> (1+我%7))|(c(c) << (8 - (1+我%7))); //复杂循环右移译码 输出数据.放(c(c)); //输出编码字符 标准::高级定制 << c(c); 我++; } 印度达牌手表.关闭(); 输出数据.关闭(); 获取字符(); 返回 0; } |
比特移位是最快的数据操作。我们可以使用这种比特移位方法来保护我们的数据、用户名等以及类似的敏感项目,这是一种有趣的练习,但这种比特移位方式是一种通过隐藏来实现安全的形式。我们可以在第二个工业安全系统的支持下使用它。有行业标准的安全实践,例如加密密码和使用行业标准的加密,可以提供真正的安全性。
我们还可以在Windows上的现代C++中使用强大的加密散列函数(SHA、SHA2、MD5、BobJenkins等)来散列此编码字符串。因此,您可以为数据系统添加另一个维度。看看这个学习在Windows上的现代C++中使用强大的加密哈希函数(SHA、SHA2、MD5、BobJenkins)
RAD Studio是一个功能强大的现代C++IDE。为什么不呢?今天下载试用版看看能为你做什么?