c语言:取整型变量x中的第p位开始的n个bit位。求解析过程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言:取整型变量x中的第p位开始的n个bit位。求解析过程相关的知识,希望对你有一定的参考价值。
c语言:取整型变量x中的第p位开始的n个bit位,可以采用位运算的方法。先向左移位,丢弃前面不需要的位,再通过向后移位,丢弃后面不需要的位,最后再向左移位到原来的位置,就可以了。
1//num&(num-1)=(1111)&(1110)=(1110)
2//num&(num-1)=(1110)&(1101)=(1100)
3//num&(num-1)=(1100)&(1011)=(1000)
4//num&(num-1)=(1000)&(0111)=0 ,循环停止。共执行4次while循环。
扩展资料
一、指定的某一位数置1
宏 #define setbit(x,y) x|=(1<<y)
二、指定的某一位数置0
宏 #define clrbit(x,y) x&=~(1<<y)
三、指定的某一位数取反
宏 #define reversebit(x,y) x^=(1<<y)
四、获取的某一位的值
宏 #define getbit(x,y) ((x) >> (y)&1)
参考技术A c语言:取整型变量x中的第p位开始的n个bit位,可以采用位运算的方法。先向左移位,丢弃前面不需要的位,再通过向后移位,丢弃后面不需要的位,最后再向左移位到原来的位置,就可以了。
[SDOI2006] 二进制方程
并查集水题。维护变量的对应位的相关关系,判断不确定点(自由元)的个数即可。
代码中的p数组:p[1] 值的id, p[2~k+1]每个变量的第一位的id。
#include <bits/stdc++.h>
using namespace std;
const int N=1e4+7;
int n,m,k,tot;
int p[N],fa[N],x[N],y[N];
int get(int x) {return fa[x]==x? x: fa[x]=get(fa[x]);}
int main() {
p[1]=2;
scanf("%d",&k);
for(int i=2,x; i<=k+1; ++i) {
scanf("%d",&x);
p[i]=p[i-1]+x;
tot+=x;
}
static char str[N];
scanf("%s",str);
for(int i=0; str[i]; ++i) {
if(isalpha(str[i])) {
int c=str[i]-'a'+1;
for(int j=p[c]; j<p[c+1]; ++j) x[++n]=j;
} else x[++n]=str[i]-'0';
}
scanf("%s",str);
for(int i=0; str[i]; ++i) {
if(isalpha(str[i])) {
int c=str[i]-'a'+1;
for(int j=p[c]; j<p[c+1]; ++j) y[++m]=j;
} else y[++m]=str[i]-'0';
}
if(n!=m) {
puts("0");
return 0;
}
for(int i=1; i<N; ++i) fa[i]=i;
for(int i=1; i<=n; ++i) {
int dx=get(x[i]), dy=get(y[i]);
if(dx+dy==1) {
puts("0");
return 0;
}
if(dx!=dy) {
fa[max(dx,dy)]=min(dx,dy);
tot--;
}
}
static int dig[N]={1},top=1;
while(tot--) {
for(int i=0; i<top; ++i) dig[i]<<=1;
for(int i=0; i<top; ++i) if(dig[i]>=10) {
dig[i+1]+=dig[i]/10, dig[i]%=10;
}
for(; dig[top]; ++top) {
dig[top+1]+=dig[top]/10, dig[top]%=10;
}
}
for(int i=top-1; ~i; --i) printf("%d",dig[i]);
return 0;
}
以下为输入格式:
第一行:k(k<=26,变量的个数,规定使用小写英文字母中的前k个字母作为变量,如k=5,则变量a,b,c,d,e)。
第二行:k个正整数,中间用一个空格隔开,依次代表k个变量的长度。
第三行:等式左边的表达式。
第四行:等式右边的表达式。
以上是关于c语言:取整型变量x中的第p位开始的n个bit位。求解析过程的主要内容,如果未能解决你的问题,请参考以下文章
用c语言实现大整形运算,64位长整型的加减法,输入限制为64位长度整数