当前位置:网站首页>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;
边栏推荐
- Actual combat simulation │ JWT login authentication
- 26.2 billion! These universities in Guangdong Province have received heavy support
- Robley's global and Chinese markets 2022-2028: technology, participants, trends, market size and share Research Report
- If the consumer Internet is compared to a "Lake", the industrial Internet is a vast "ocean"
- Database postragesql lock management
- 19. Delete the penultimate node of the linked list
- There is a new Post-00 exam king in the testing department. I really can't do it in my old age. I have
- Armv8-a programming guide MMU (3)
- 如果消费互联网比喻成「湖泊」的话,产业互联网则是广阔的「海洋」
- SAP ui5 application development tutorial 107 - trial version of SAP ui5 overflow toolbar container control introduction
猜你喜欢
I was beaten by the interviewer because I didn't understand the sorting
How to use words to describe breaking change in Spartacus UI of SAP e-commerce cloud
Pandora IOT development board learning (RT thread) - Experiment 4 buzzer + motor experiment [key external interrupt] (learning notes)
Chia Tai International Futures: what is the master account and how to open it?
Postman automatically fills headers
Remote control service
phpstrom设置函数注释说明
SAP ui5 application development tutorial 107 - trial version of SAP ui5 overflow toolbar container control introduction
Basic operation of database and table ----- phased test II
Great God developed the new H5 version of arXiv, saying goodbye to formula typography errors in one step, and mobile phones can also easily read literature
随机推荐
[flutter topic] 64 illustration basic textfield text input box (I) # yyds dry goods inventory #
Are you still writing the TS type code
【大型电商项目开发】性能压测-性能监控-堆内存与垃圾回收-39
Introduction to the gtid mode of MySQL master-slave replication
[wave modeling 2] three dimensional wave modeling and wave generator modeling matlab simulation
Yyds dry goods inventory [Gan Di's one week summary: the most complete and detailed in the whole network]; detailed explanation of MySQL index data structure and index optimization; remember collectio
微信小程序;胡言乱语生成器
Expose testing outsourcing companies. You may have heard such a voice about outsourcing
[CTF] AWDP summary (WEB)
Call Huawei order service to verify the purchase token interface and return connection reset
抓包整理外篇——————状态栏[ 四]
Wechat applet: the latest WordPress black gold wallpaper wechat applet two open repair version source code download support traffic main revenue
Wechat applet: Xingxiu UI v1.5 WordPress system information resources blog download applet wechat QQ dual end source code support WordPress secondary classification loading animation optimization
Poap: the adoption entrance of NFT?
微信小程序:全网独家小程序版本独立微信社群人脉
Database postragesql client authentication
College degree, what about 33 year old Baoma? I still sell and test, and my monthly income is 13K+
Database postragesql client connection default
How to safely eat apples on the edge of a cliff? Deepmind & openai gives the answer of 3D security reinforcement learning
【FPGA教程案例10】基于Verilog的复数乘法器设计与实现