如何将int转换为float(返回为无符号,但解释为float)?我不能使用任何高级语言结构,如联合,只有按位操作,控制逻辑(if/while),+和 - 等.
我保持一个索引计数器,应该像圆形数组一样.我强制大小为2的幂,因此用于size_t MASK = size_ - 1在遍历时替换模数:
index_ = (++index_) & MASK;
Run Code Online (Sandbox Code Playgroud)
但问题是,在我的情况下,我有时会意识到我可以重用我下次在这里发布的那个索引,所以当发生这种情况时我会有这样的事情:
if (canReuseLastUsedIndex())
--index_;
Run Code Online (Sandbox Code Playgroud)
但是当最后一次抛出index_是零时,这会崩溃,因为这不会缠绕到size_(即MASK+1).有这种方法可以让这种情况发生吗?还是什么东西很快?(即,优选不具有地说:if (index_) --index_; else index_ = size_)
c++ optimization performance bit-manipulation bitwise-operators
好吧,我可以通过逻辑做到这一点,但我打赌有一个数学运算或表达式来做到这一点.有人存在吗?如果是,那是什么?
这是算法:
private int calcNumberOfLongs(int size) {
if (size % 64 == 0) {
return size / 64;
} else {
return size / 64 + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
让我清楚我想要的东西:
对于150位,我需要三个64位长.两个当然只给我128位.这是第一次计算.
第二个计算,这一个更重要,因为它将一直执行,是从位位置变为长位.例如:
bit 5 -> first long
bit 64 -> first long
bit 65 -> second long
bit 140 -> third long
Run Code Online (Sandbox Code Playgroud)
获取此信息的数学表达式和/或按位运算是什么?
好的,从下面的答案来看,它似乎是从位位置变长,我们只是使用:
多头头寸=比特头寸/ 64
延续在这里:如何在2的幂时将除法变为按位移位?
我不确定这是否可行,因为据我所知,引用不能引用整数中的各个位,但我很想知道是否有一种技术可以实现以下效果.
int z = 0x1234;
z[0] = 1; //set the most significant bit of z.
uint8_t bit = z[30] //get the index 30 bit of z, counting from the left.
Run Code Online (Sandbox Code Playgroud)
如果我不能z[0] = 1,我想知道是否至少可以使用重载操作提取位.
说我写这个:
a=01100001
b=01100010
c=01100011
d=01100100
e=01100101
Run Code Online (Sandbox Code Playgroud)
现在,每个字母都与给定的数字类似,我将如何处理相似的值:
Python会想要这样做:
a + b = 2200011
Run Code Online (Sandbox Code Playgroud)
但我想要它做的就是这个
我想做的是 a + b = 10011100
有没有办法在这个实例中编辑python算出数学的方式?
到目前为止,我已经给出了设置值来表示字母,但我想做的是改变python给我结果的方式来匹配上面的解释中的XOR门
所以任何人都可以给出代码的例子来给出设定值(1 + 1 = 0)(0 + 0 = 1)...例如
你好我有两个号码
int a= 6;
int b = 20;
Run Code Online (Sandbox Code Playgroud)
当我在做orie |操作时,它没有给出正确的结果.
int result = a | b ;
Run Code Online (Sandbox Code Playgroud)
result = 22但正确的答案是26.
我可以理解它使用逐位AND运算符,但它是如何工作的?
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long num1=sc.nextLong();
long count=(num1 & (num1- 1));
if(count == 0l) {
System.out.println("power of two");
}
}
Run Code Online (Sandbox Code Playgroud) 在我的学院关于8086 Assembly的文档中有以下示例:
TEST AL, 16 ; tests the 5th bit's state
Run Code Online (Sandbox Code Playgroud)
考虑到TEST指令的作用,这一点是否正确?它根据标记设置标记AL & 16.那怎么测试第5位?
注意:之前没有提到AL的值,正好在这里显示的内容,所以我认为这必须适用于一般情况.
#define SQUARE(x,y) (x<y?x:y)
int a = 5, b = 6, c = 3;
int var = SQUARE(a & c,b);
Run Code Online (Sandbox Code Playgroud)
我搜索并了解到'''在'&'之前.根据规则它应该给'5'.但它输出为'1'.但在某些情况下,它会提供正确的输出.你能解释一下宏观规则以及我在这里缺少什么.
当我尝试运行以下代码时,它显示“ FALSE”而不是“ TRUE”。有人可以解释为什么代码返回false吗?
#include <stdio.h>
int main(void)
{
if(-8 & 7)
{
printf("TRUE");
}
else
{
printf("FALSE");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) c ×3
java ×3
c++ ×2
algorithm ×1
assembly ×1
bitwise-and ×1
int ×1
operators ×1
optimization ×1
performance ×1
python ×1
x86 ×1
x86-16 ×1