当前位置:网站首页>Common bit operation skills of C speech
Common bit operation skills of C speech
2022-07-05 01:26:00 【Snowflakes flying all over the sky】
One : Judge parity
void odd_even(int n)
{
if(n & 1 == 1)
{
printf("n Is odd !\n");
}
}
Two : Exchange two numbers
int swap(int x, int y)
{
x = x ^ y;
y = x ^ y;
x = x ^ y;
}
Based on the following properties of XOR operation :
1. Any variable X XOR with itself , The result is 0, namely X^X=0
2. Any variable X And 0 Xor operation , The result remains unchanged. , namely X^0=X
3. XOR operations are associative , namely a^ b ^ c =(a ^ b)^ c = a ^(b ^ c)
4. XOR operation is exchangeable , namely a ^ b = b ^ a
3、 ... and : Find numbers that are not repeated
int array[] = {1, 2, 3, 4, 5, 1, 2, 3, 4};
use :1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 1 ^ 2 ^ 3 ^ 4;
// Equivalent to :
(1 ^ 1) ^ (2 ^ 2) ^ (3 ^ 3) ^ (4 ^ 4) ^ 5;
// Equivalent to :
0 ^ 0 ^ 0 ^ 0 ^ 5;
// The result is :
5;
Four :m Of n Power
Want to solve the problem through binary , You have to break the numbers into binary to observe . For example, calculation m Of 15 Power :
m^15 = m^8 * m^4 * m^2 * m^1; //^ Represents a power operation
Change to binary :
m^1111 = m^1000 * m^0100 * m^0010 * m^0001;
We can go through "& 1" and ">> 1" To read... Bit by bit 1111, be equal to 1 Multiply the multiplier represented by this bit to the final result . The code is as follows :
int Pow(int m, int n)
{
int res = 1;
int tmp = m;
while(n != 0)
{
if(n & 1 == 1)
{
res *= tmp;
}
tmp *= tmp;
n = n >> 1;
}
return res;
}
5、 ... and : Detection integer n Whether it is 2 The power of
int ispow(int N) { return ((N & (N - 1)) == 0) ? 1 : 0; }
6、 ... and : Find the absolute value
int abs(int n)
{
return (n ^ (n >> 31)) - (n >> 31);
}
7、 ... and : Find the maximum of two numbers
int max(int x, int y)
{
return x ^ ((x ^ y) & -(x < y));
}
8、 ... and : Bit skill
One 32bit Bits of data 、 Byte read operation
(1) Get single byte :
#define GET_LOW_BYTE0(x) ((x >> 0) & 0x000000ff) /* For the first 0 Bytes */
#define GET_LOW_BYTE1(x) ((x >> 8) & 0x000000ff) /* For the first 1 Bytes */
#define GET_LOW_BYTE2(x) ((x >> 16) & 0x000000ff) /* For the first 2 Bytes */
#define GET_LOW_BYTE3(x) ((x >> 24) & 0x000000ff) /* For the first 3 Bytes */
(2) Get someone :
#define GET_BIT(x, bit) ((x & (1 << bit)) >> bit) /* For the first bit position */
(3) Clear a byte :
#define CLEAR_LOW_BYTE0(x) (x &= 0xffffff00) /* Clear the ground 0 Bytes */
#define CLEAR_LOW_BYTE1(x) (x &= 0xffff00ff) /* Clear the ground 1 Bytes */
#define CLEAR_LOW_BYTE2(x) (x &= 0xff00ffff) /* Clear the ground 2 Bytes */
#define CLEAR_LOW_BYTE3(x) (x &= 0x00ffffff) /* Clear the ground 3 Bytes */
(4) Clear someone :
#define CLEAR_BIT(x, bit) (x &= ~(1 << bit)) /* Clear the ground bit position */
(5) Set a byte to 1:
#define SET_LOW_BYTE0(x) (x |= 0x000000ff) /* The first 0 Byte set 1 */
#define SET_LOW_BYTE1(x) (x |= 0x0000ff00) /* The first 1 Byte set 1 */
#define SET_LOW_BYTE2(x) (x |= 0x00ff0000) /* The first 2 Byte set 1 */
#define SET_LOW_BYTE3(x) (x |= 0xff000000) /* The first 3 Byte set 1 */
(6) Set one to :
#define SET_BIT(x, bit) (x |= (1 << bit)) /* Put in the first place bit position */
(7) Judge the value of some consecutive bits
/* For the first [n:m] The value of a */
#define BIT_M_TO_N(x, m, n) ((unsigned int)(x << (31-(n))) >> ((31 - (n)) + (m)))
Nine : Judge the value of a bit
#include <stdio.h>
int main (void){
unsigned int a = 0x68;
if(a & (1 <<3)){
printf("0x68 The third value bit of 1\n");
}else {
printf("0x68 The third value bit of 0\n");
}
}
Ten : The remainder
int a=X%Y;Y Must be 2^N.
Formula for :a=X&(2^N-1) perhaps a=X &( ~Y);
11、 ... and : Division operations
a=a*4 Change to bit operation a=a<<2;
a=a/4 Change to bit operation a=a>>2;
Twelve : Get the value of consecutive digits
#define CALC_MASK(offset,len,mask) \
if((offset+len)>16) \
{ \
return error; \
} \
else \
mask = (((1<<(offset+len)))-(1<<offset))
\\ data obtain bit6 and bit7 Value ;
CALC_MASK(6,2,mask);
usData=(data&mask)>>6;
边栏推荐
- [wave modeling 2] three dimensional wave modeling and wave generator modeling matlab simulation
- 微信小程序;胡言乱语生成器
- Wechat applet: wechat applet source code download new community system optimized version support agent member system function super high income
- Postman automatically fills headers
- PHP wechat official account development
- 小程序容器技术与物联网 IoT 可以碰撞出什么样的火花
- phpstrom设置函数注释说明
- 142. Circular linked list II
- 26.2 billion! These universities in Guangdong Province have received heavy support
- La jeunesse sans rancune de Xi Murong
猜你喜欢
College degree, what about 33 year old Baoma? I still sell and test, and my monthly income is 13K+
26.2 billion! These universities in Guangdong Province have received heavy support
Logstash、Fluentd、Fluent Bit、Vector? How to choose the appropriate open source log collector
Wechat applet: wechat applet source code download new community system optimized version support agent member system function super high income
【海浪建模1】海浪建模的理论分析和matlab仿真
[development of large e-commerce projects] performance pressure test - Performance Monitoring - heap memory and garbage collection -39
【CTF】AWDP总结(Web)
每日刷题记录 (十三)
Poap: the adoption entrance of NFT?
Take you ten days to easily complete the go micro service series (IX. link tracking)
随机推荐
Database postragesq BSD authentication
Call Huawei order service to verify the purchase token interface and return connection reset
Playwright recording
Discrete mathematics: reasoning rules
Research Report on the overall scale, major producers, major regions, products and application segmentation of agricultural automatic steering system in the global market in 2022
Daily question brushing record (13)
Postman automatically fills headers
POAP:NFT的采用入口?
资深测试/开发程序员写下无bug?资历(枷锁)不要惧怕错误......
What happened to those who focused on automated testing?
如果消费互联网比喻成「湖泊」的话,产业互联网则是广阔的「海洋」
Async/await you can use it, but do you know how to deal with errors?
Expose testing outsourcing companies. You may have heard such a voice about outsourcing
What is the current situation and Prospect of the software testing industry in 2022?
Database performance optimization tool
[wave modeling 2] three dimensional wave modeling and wave generator modeling matlab simulation
142. Circular linked list II
A simple SSO unified login design
Database postragesq peer authentication
Delaying wages to force people to leave, and the layoffs of small Internet companies are a little too much!