为什么~2等于-3?~操作员如何工作?
在第2章,关于按位运算符的部分(第2.9节),我无法理解其中一个示例方法是如何工作的.
这是提供的方法:
unsigned int getbits(unsigned int x, int p, int n) {
return (x >> (p + 1 - n)) & ~(~0 << n);
}
Run Code Online (Sandbox Code Playgroud)
这个想法是,对于给定的数字x,它将返回从位置p开始的n位,从右边开始计数(最右边的位是位置0).给出以下方法:main()
int main(void) {
int x = 0xF994, p = 4, n = 3;
int z = getbits(x, p, n);
printf("getbits(%u (%x), %d, %d) = %u (%X)\n", x, x, p, n, z, z);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
getbits(63892 (f994), 4, 3) = 5 (5)
我得到了部分内容,但我对"大局"感到困扰,主要是因为我不理解的比特(没有双关语).
我特别遇到问题的部分是补充部分:~(~0 << …
我有两个类型ICollection<MyType>称为c1和的集合c2.我想找到的一组是在项目c2中没有的c1,在争取平等的启发是Id物业MyType.
在C#(3.0)中执行此操作的最快方法是什么?
我编写了这个C++程序,我无法理解为什么它1在第三个cout语句中打印.
#include<iostream>
using namespace std;
int main()
{
bool b = false;
cout << b << "\n"; // Print 0
b = ~b;
cout << b << "\n"; // Print 1
b = ~b;
cout << b << "\n"; // Print 1 **Why?**
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
0
1
1
Run Code Online (Sandbox Code Playgroud)
为什么不打印以下内容?
0
1
0
Run Code Online (Sandbox Code Playgroud) 我正在尝试为非常简单的加密类型编写解码器.通过扫描仪输入0-255的数字,这些位被反转,然后转换为字符并打印.
例如,数字178应转换为字母"M".
178是10110010.
反转所有位应该给出01001101,即77或"M"作为字符.
我遇到的主要问题是,据我所知,Java不支持无符号字节.我可以将值读取为int或short,但由于额外的位,因此在转换期间值将关闭.理想情况下,我可以使用按位补码运算符,但我认为如果我使用带符号数字,我最终会得到负值.关于如何处理这个问题的任何想法?
假设我有一个列表:
l = [0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
如何迭代列表,从列表中获取每个项目及其补充?那是,
for item, others in ...
print(item, others)
Run Code Online (Sandbox Code Playgroud)
会打印
0 [1, 2, 3]
1 [0, 2, 3]
2 [0, 1, 3]
3 [0, 1, 2]
Run Code Online (Sandbox Code Playgroud)
理想情况下,我正在寻找一个简洁的表达,我可以在理解中使用.
假设我有一个DNA序列.我想得到它的补充.我使用了以下代码,但我没有得到它.我究竟做错了什么 ?
s=readline()
ATCTCGGCGCGCATCGCGTACGCTACTAGC
p=unlist(strsplit(s,""))
h=rep("N",nchar(s))
unlist(lapply(p,function(d){
for b in (1:nchar(s)) {
if (p[b]=="A") h[b]="T"
if (p[b]=="T") h[b]="A"
if (p[b]=="G") h[b]="C"
if (p[b]=="C") h[b]="G"
}
Run Code Online (Sandbox Code Playgroud) 在我的练习表上有一个问题是找到两个公式的补码
(1) (aa|bb)*
和
(2)(a|b)(aa|bb)(a|b).
在我看来a* | b*,两者的补充只意味着只有a或只有b?
什么是1056.074的10的补充?
请检查解决方案:
9999.999 - 1056.074 = 8943.925(9的补充1056.074)
现在1加到.074或8943?