桃红世界-浪漫色彩世界:沉醉在粉色的梦幻诗篇

核心内容摘要

煌瑟:点亮夜色,点燃激情
PH中文站破解版安装包:探索无限可能,解锁数字自由新篇章

探索视界,品味经典:亚洲一线二线MV大片国产大片全集深度解析

位运算百度百科如下:程序中的所有数在计算机内存中都是以二进制的形式储存的。

位运算就是直接对整数在内存中的二进制位进行操作位操作的优势位运算是一种底层的运算往往比我们普通的运算要快上许多许多位运算是最高效而且占用内存最少的算法操作执行效率非常高位运算操作的是二进制数会拥有一些二进制的特性在实际问题可以方便运用位运算只需较低的空间需求位运算使用能使程序变得更加简洁和优美位运算可以表示一些状态集合运算符号下面的a和b都是整数类型则含义C语言按位与a b按位或a | b按位异或a ^ b按位取反~a左移a b带符号右移a b无符号右移num (1 N)优先级C语言中位运算符之间按优先级顺序排列为优先级符号1~

34^5|

^、|、、概念简介以及技巧本文会以C语言的交互环境来做代码演示常见的二进制位的变换操作and运算符 判断奇偶数对于除0以外的任意数x使用x11作为逻辑判断即可if (x

{ }判断某个二进制位是否为1比如第7位, 0x40转到二进制是0100 0000,代表第7位是

if (n0x

{ //TODO:添加你要处理的代码 }字节读取(x

0x000000ff /* 获取第0个字节 */ (x

0x000000ff /* 获取第1个字节 */ (x

0x000000ff /* 获取第2个字节 */ (x

0x000000ff /* 获取第3个字节 */判断一个数是不是 2 的指数bool isPowerOfTwo(int n) { if (n

return false; return (n (n -

) 0; }取余(除数为2的n次方)//得到余数 int Yu(int num,int n) { int i 1 n; return num(i-

; }指定二进制位数截取比如说16位二进制数A1001 1001 1001 1000如果来你想获A的哪一位的值,就把数字B0000 0000 0000 0000的那一位设置为

比如说我想获得A的第三位就把B的第三位数字设置为1则B为0000 0000 0000 0100设置完之后再把A、B求与 其结果若为0说明A的第三位为0其结果为1说明A的第三位为

同理若要获得A的第五位就把B设置为0000 0000 0001 0000之后再求与。

通常在我们的程序中数字B被称为掩码其含义是专门用来测试某一位是否为0的数值。

统计二进制中 1 的个数利用xx(x-

会将x用二进制表示时最右边的一个1变为0因为x-1会将该位变为

int Count(int x) { int sum0; while(x) { sum; xx(x-

; } return sum; }or操作符 |生成组合编码进行状态压缩当把二进制当作集合使用时可以用or操作来增加元素。

合并编码 在对字节码进行加密时加密后的两段bit需要重新合并成一个字节这时就需要使用or操作。

求一个数的二进制表达中0的个数int Grial(int x) { int count 0; while (x

{ count; x | (x

; } return count; }xor操作符 ^两个整数交换变量名void swap(int a, int b) { a ^ b; b ^ a; a ^ b; }异或的本质不同为1相同为0x是二进制数0101 y是二进制数1011 则结果为x^y1110 0^000^111^011^10判断两个数是否异号int x -1, y 2; bool f ((x ^ y)

; // true int x 3, y 2; bool f ((x ^ y)

; // false数据加密将需要加密的内容看做A密钥看做BA ^ B加密后的内容C。

而解密时只需要将C ^ 密钥B原内容A。

如果没有密钥就不能解密#include stdio.h #include stdlib.h #include string.h #define KEY 0x86 int main() { char p_data[16] {Hello World!}; char Encrypt[16]{0},Decode[16]{0}; int i; for(i 0; i strlen(p_data); i) { Encrypt[i] p_data[i] ^ KEY; } for(i 0; i strlen(Encrypt); i) { Decode[i] Encrypt[i] ^ KEY; } printf(Initial date: %s\n,p_data); printf(Encrypt date: %s\n,Encrypt); printf(Decode date: %s\n,Decode); return 0; }数字判重利用了二进制数的性质x^y^y x。

我们可见当同一个数累计进行两次xor操作相当于自行抵销了,剩下的就是不重复的数找出没有重复的数int find(int[] arr){ int tmp arr[0]; for(int i 1;i arr.length; i){ tmp tmp ^ arr[i]; } return tmp; }not操作交换符号int reversal(int a) { return ~a 1; }取绝对值效率高n31 取得n的符号若n为正数n31等于0若n为负数n31等于-1若n为正数 n^00,数不变若n为负数,有n^-1 需要计算n和-1的补码然后进行异或运算结果n变符号并且为n的绝对值减1再减去-1就是绝对值int abs(int n) { return (n ^ (n

) - (n

; }也可以这样使用int abs(int n) { int i n 31; return i 0 ? n : (~n

; }从低位到高位.将n的第m位置1将1左移m-1位找到第m位得到

..

..000, n在和这个数做或运算int setBitToOne(int n, int m) { return n | (1 (m-

); }同理从低位到高位,将n的第m位置0,代码如下int setBitToZero(int n, int m) { return n ~(1 (m-

); }shl操作 shr操作求2的N次方1n高低位交换unsigned short a 34520; a (a

| (a

;进行二进制逆序unsigned short a 34520; a ((a 0xAAAA)

| ((a 0x

5555)

; a ((a 0xCCCC)

| ((a 0x

3333)

; a ((a 0xF0F

0)

| ((a 0x0F0F)

; a ((a 0xFF

00)

| ((a 0x00FF)

;获得int型最大最小值int getMaxInt() { return (1

- 1;//2147483647 由于优先级关系括号不可省略 } int getMinInt() { return 1 31;//-2147483648 }m的n次方//自己重写的pow()方法 int pow(int m , int n){ int sum 1; while(n !

{ if(n 1

{ sum * m; } m * m; n n 1; } return sum; }找出不大于N的最大的2的幂指数int findN(int n){ n | n 1; n | n 2; n | n 4; n | n 8 // 整型一般是 32 位上面我是假设 8 位。

return (n

1; }二分查找32位整数的前导0个数int nlz(unsigned x) { int n; if (x

return(

; n 1; if ((x

16)

{n n 16; x x 16;} if ((x

24)

{n n 8; x x 8;} if ((x

28)

{n n 4; x x 4;} if ((x

30)

{n n 2; x x 2;} n n - (x

; return n; }位图的操作将 x 的第 n 位置1可以通过x | (x n)来实现set_bit(char x, int n);将 x 的第 n 位清0可以通过x ~(1 n)来实现clr_bit(char x, int n);取出 x 的第 n 位的值可以通过(x n) 1来实现get_bit(char x, int n);如下:#define clr_bit(x, n) ( (x) ~(1 (n)) ) #define set_bit(x, n) ( (x) | (1 (n)) ) #define get_bit(x, n) ( ((x)(n)) 1 )综合应用以下仅列出,感兴趣可以参考下面链接.关于操作计数方法计算整数的符号检测两个整数是否具有相反的符号计算无分支的整数绝对值abs计算两个整数的最小值最小值或最大值最大值而无需分支确定整数是否为2的幂标志延伸从恒定位宽扩展的符号从可变位宽扩展的符号通过3个操作从可变位宽扩展符号 有条件地设置或清除位而不分支有条件地否定一个值而不分支根据掩码合并两个值中的位计数位设置计数位设置幼稚的方式计算由查找表设置的位数位集Brian Kernighan的方式使用64位指令对

24或32位字中设置的位进行计数并行设置计数位从最高有效位到给定位置的计数位的设置等级从给定的计数等级中选择位位置从最高有效位开始计算奇偶校验如果设置了奇数位数则为1否则为0天真地计算单词的奇偶性通过查找表计算奇偶校验使用64位乘法和模数除法计算字节的奇偶校验用乘法计算单词的奇偶校验并行计算奇偶校验交换价值用减法和加法交换值用XOR交换值用XOR交换单个位反转位序列反转位是显而易见的方式逐字查找表中的位反转通过3个操作64位乘法和模数除法反转字节中的位通过4个操作反转字节中的位64位乘法无除法通过7个操作反转字节中的位无64位仅32位与5 * lgN个运算并行地反转N位数量模数除法又名计算余数在不进行除法运算的情况下将模数除以1 s显而易见在不进行除法运算的情况下以1 s-1计算模数除法不进行除法运算就并行计算1 s-1的模数除法查找整数的整数对数2又称最高位集的位置使用ON运算找到MSB N设置为整数的对数2显而易见的方法查找具有64位IEEE浮点数的整数的整数对数2使用查找表找到整数的对数2在OlgN运算中找到N位整数的对数2使用乘法和查找在OlgN操作中找到N位整数的对数2查找整数的对数以10为底的整数查找整数的整数对数10查找32位IEEE浮点数的整数对数基数2查找32位IEEE浮点的pow2r根的整数对数基数2对于无符号整数r计算连续的尾随零位或查找位索引线性计算右边的连续零位后缀并行计算右侧连续的零位后缀通过二进制搜索计算右边连续的零位跟踪通过强制转换为浮点数来计算右侧连续的零位跟踪用模数除法和查找计算右边连续的零位跟踪用乘法和查找计数右边连续的零位后跟通过浮法舍入到2的下一个最高幂向上舍入到2的下一个最高幂交织位也称为计算莫顿数交错位的明显方式通过表查找交织位带64位乘法的交织位通过二进制幻数交错位测试单词中的字节范围并计算出现的次数确定单词是否为零字节确定一个单词的字节数是否等于n确定一个单词的字节数是否小于n确定单词的字节数是否大于n确定单词是否在m和n之间有一个字节按词典顺序计算下一位排列

积积对肤肤的免费软件大全2023-积积对肤肤的免费软件大全应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123