博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
位运算
阅读量:5157 次
发布时间:2019-06-13

本文共 1295 字,大约阅读时间需要 4 分钟。

0x3F 3F 3F 3F 有两个特性

1、整数的两倍不超过 0x7F FF FF FF,即 int 能表示的最大正整数.

2、整数的每 8 位(每个字节)都是相同的。

 

需要考虑溢出的问题,以防止超过整数所能表示的最大范围,在表达式中,是按照最高的数据类型来保持中间变量的,与最后保存的变量数据类型无关。

一、 计算  (a ^ b) mod p (快速幂)

1 int power (int a, int b, int p) {2   int ans = 1 % p;3   while (b) {4     if (b & 1) ans = (ans * a) % p;5     a = (a * a) % p;6     b >>= 1;7   }8   return ans;9 }
View Code

 

二、计算 (a * b) mod p

方法一:b 用二进制表示.和快速幂的类似。

1 int mul_1 (int a, int b, int p) {2   int ans =  0;3   while (b) {4     if (b & 1) ans = (ans + a) % p;5     a = (a * 2) % p;6     b >>= 1; 7   }8   return ans;9 }
View Code

 

方法二: (a * b) mod p = (a * b) - (a * b / p) * p

1 int mul_2 (int a, int b, int p) {2   a = a % p; 3   b = b % p;4   int c = a * b / p;5   int ans = a * b - c * p;6   if (ans < 0) ans += p;7   else if (ans >= p) ans -= p;8   return ans;9 }
View Code

 

二进制状态压缩

是将一个长度为 m 的 bool 数组用一个 m 位的二进制整数表示并存储。例如 STL 中的 bitset.

 

1、取出整数 n 在二进制表示下的第 k 位             (n >> k) & 1

2、取出整数 n 在二进制表示下的第 0 ~ k-1 位      (n) & ((1 << k ) - 1)

3、把整数 n 在二进制的表示下的第 k  位取反                  n  xor (1 << k)

4、把整数 n 在二进制表示下的第 k 位赋值 1                   n | (1 << k)

5、把整数 n  在二进制表示下的第 k 位赋值 0                  n & (~(1 << k))

 

if (n % 2 == 0) n xor 1  = n + 1

else n xor 1 = n - 1

 

lowbit()运算

lowbit(n) 取出非负整数 n 在二进制表示下最低位的 1 以及它后边的 0 构成的数值

lowbit(n) = n & (~n + 1) = n & (-n)

 

转载于:https://www.cnblogs.com/gznb/p/11219752.html

你可能感兴趣的文章
0407_idea_JRebel_配置使用
查看>>
第1章 认识jQuery
查看>>
[ZJOI2010]排列计数
查看>>
[SDOI2016]数字配对
查看>>
html转义表
查看>>
网站优化要尽量减少服务器HTTP请求次数
查看>>
php序列化与反序列化
查看>>
JQuery AJAX: 了解jQuery AJAX
查看>>
Vue nodejs商城项目-商品列表价格过滤和加入购物车功能
查看>>
跳一跳作弊技术-Android
查看>>
hibernate的映射类型
查看>>
Nunit 使用介绍
查看>>
RedHat系列软件管理(第二版) --源码包安装
查看>>
【WPF】修改ListBox的Item的样式
查看>>
洛谷P3367并查集
查看>>
js使用Switch达到切换不同颜色的效果
查看>>
Camera Calibration in detail
查看>>
poj3417 network ( LCA)
查看>>
Esfog_UnityShader教程_遮挡描边(原理篇)
查看>>
26个高效工作的小技巧(转载)
查看>>