我得到了这个二进制数字// delete value from the end of the list
int DeleteEndVal(){
if(CheckListEmpty() == true){
cout << "Empty list. Nothing to delete." << endl;
return -1;
}
else{
int val;
Node *prev;
Node *cur;
if(head->next == NULL){
val = tail->data;
head = NULL;
tail = NULL;
}
else{
prev = head;
cur = head->next;
while (cur->next != NULL){
prev = prev->next;
cur = cur->next;
val = cur->data;
}
prev->next = NULL;
free(cur);
}
return val;
}
}
我需要剥离8个最高有效位,并在末尾加上101111111111000
。
我试图制作11111000
,但这导致101111111111000 << 8
,它与10111111111100000000000
的效果不一样,后者剥离了较低的位。那怎么办呢?最终结果必须为二进制类型。
答案 0 :(得分:1)
您可以使用按位与运算符来获取整数n
的最右边8位:
n&255
255是最小的8位值的总和。
因此,从101111111111000
(十进制为24568)开始,n&255
得到11111000
,十进制为248。
答案 1 :(得分:1)
另一种通用的方法是:
n = int('101111111111000', 2) # 24568
n & (1 << int.bit_length(n) - 8) - 1
提供120(或1111000
)
答案 2 :(得分:0)
要实现x
位数字n
的实现,可以使用
x&(2**(len(bin(x))-2-8)-1)
-2剥离0b,-8剥离最左侧
简单地说,ands
就是您的电话号码,1
足以使最左边的8位设置为0。