bit-manipulation相关内容

您如何使用C确定数字的二进制表示中的偶数是否为1?

已经有关于计算一个数字中有多少 1 个问题,但是这个问题是关于判断1的偶数还是奇数. 不允许任何循环或条件(包括switch)语句.另外,应避免除法,乘法或模运算符.更具体地说,我们可以假定它是一个32位无符号整数. 实际上我已经有一个实现,但是我无法弄清楚它起作用的原因.任何对其正确性或任何新想法的证明都将非常有帮助. int偶数_无(x){x ^ = x> 16;x ^ = x ..
发布时间:2021-04-15 19:54:52 其他开发

缓存块标签大小

我正在使用gcc作为编译器在linux上用C编写一个缓存模拟程序,并且在大多数情况下我已经完成了.只有少数测试用例出错(在应击中的数千个联邦地址中,有些东西丢失了).我在命令行上指定了缓存属性.我怀疑代码中的错误与标记有关(如果事情没有实现,那么它们的标记在应有的情况下就不会匹配).所以我的问题是:我计算标签正确吗? //设置位的大小int offsetSize = log2(lineSize) ..
发布时间:2021-04-15 19:54:47 其他开发

补充第i位

假定AX包含一个介于0到15之间的数字.现在必须对BX中的"AXth"位进行补码. 例如,AX包含值 6 ,那么BX中的第6位应该被补码. 我该如何实现? 解决方案 xor 操作正好适合于此. (所有代码均采用Intel语法.) mov cl,al 将位的索引移动到 cl ;8086支持 shl 一位或 cl 位. mov ax,01h 在清除所有其他位的同时 ..
发布时间:2021-04-15 19:54:44 其他开发

如何将4个8位坐标存储为一个整数(C#)?

可以说我有以下四个变量:player1X,player1Y,player2X,player2Y.例如,这些值分别具有以下值:5、10、20、12.每个值的最大值均为8位,我想将它们存储为一个整数(32位),如何实现呢? 通过这样做,我想创建一个字典,记录游戏中某些状态发生的频率.例如,5,10,20,12是一种状态,6,10,20,12是另一种状态. 解决方案 您可以使用 BitConv ..
发布时间:2021-04-15 19:54:41 C#/.NET

按位xor 0xFFFFFFFF?

我无法解决这个问题: def expr(a):返回〜(a ^ 0xFFFFFFFF),a ^ 0xFFFFFFFF,〜a,a打印(expr(0xFFFFFFFF))打印(expr(1))打印(expr(0))打印(expr(-1)) 我了解〜a 表示 a 的二进制补码,但是 a ^ 0xFFFFFFFF 也会翻转所有位,但是python会将其解释为大量.我知道Python3使用的是未绑定整 ..
发布时间:2021-04-15 19:54:36 其他开发

使用位字段来节省内存

我目前正在大学里在ps3上启动一个项目,我们在代码优化方面获得了好评. 我和我的伙伴一直在研究位字段,因为我们正在处理0到255之间的数百万个数字.我们计算出是否可以将4个整数打包成4个字节(通常为整数大小的内存块),而不是仅将1个打包成整数.我们可以将使用的内存四分之一.我们认为处理数据是我们可以进行的最大优化之一,我们正在研究所有问题.这值得麻烦吗?就编辑int而言,似乎很难继续进行.我 ..
发布时间:2021-04-15 19:54:33 C/C++开发

如何在装配中旋转值

我要在汇编x86 64位中实现一个功能,而我无法更改该功能: 无符号长旋转(无符号长val,无符号长num,无符号长方向); 方向-左侧为1,右侧为0. 这是我的向左移动的代码,但是最后一关没有用.有谁可以帮助我吗. 旋转:推送RBP推rdi推RSI推rdxmov rbp,rspsub rsp,16cmp rdx,1je shift_leftshift_left:mov rax,rd ..
发布时间:2021-04-15 19:54:30 其他开发

不能将负数在c中向右移动

我正在学习"K& R的C语言".现在,我正在按位进行操作.我很难理解以下代码. int mask =〜0>>n; 我正在使用它掩盖另一个二进制文件的n左侧.0000 11111010 0101//随机数 我的问题是,当我打印var mask时,它仍为负-1.假设n为4,我认为将〜0(即-1)移位为15(0000 1111). 感谢您的回答 解决方案 对负值执行右移会产生 ..
发布时间:2021-04-15 19:54:25 其他开发

.net FlagsAttribute枚举是否需要手动设置值?

为了在显示新闻故事的方法上允许使用不同的格式选项,我创建了一个枚举,可以将其传递以指定其显示方式. [标志]私人枚举NewsStyle{缩略图= 0,日期= 1文字= 2链接= 4,全部= 8}字符串FormatNews(DataRow新闻,NewsStyle样式){StringBuilder HTML =新的StringBuilder();//应该显示链接如果(((newsStyle& Ne ..
发布时间:2021-04-15 19:54:23 C#/.NET

开始时右移零

我正在尝试一种左移操作,该操作会在开头添加零而不是一个零.例如,如果我左移 0xff ,我会得到: 0xff>3 = 11111111 我可以使用任何操作来获得与左移等效的操作吗?即,我想得到这个: 00011111 有什么建议吗? 修改 要回答评论,这是我正在使用的代码: int数字= ..
发布时间:2021-04-15 19:54:20 C/C++开发

Python正确使用__str__和__repr__

我当前的项目需要大量使用位字段.我发现了一个简单而实用的位字段类的密码但是它缺少我需要的一些功能,所以我决定扩展它.我只是要实现 __ str __ 和 __ repr __ ,并且我想确保遵守惯例. __ str __ 应该是非正式且简洁的,所以我使它返回了位字段的十进制值(即 str(bit field 11)将是"3" . __ repr __ 应该是该对象的正式表示形式,所以我 ..
发布时间:2021-04-15 19:54:16 Python

对字节进行按位运算

我有两个对象, a 和 b ,每个对象在bytes对象中都包含一个字节. 我正在尝试对此进行按位运算,以获取两个最高有效位(big-endian,因此位于左侧). a = sock.recv(1)b = b'\ xc0'c = a&b 但是,它生气地在我的脸上吐出了 TypeError . Traceback(最近一次通话最近):在中的文件“", ..
发布时间:2021-04-15 19:54:12 Python

将一对位交换为一个字节

我有一个任意的 8位二进制数字,例如 11101101 我必须像这样交换所有对位: 交换之前: 11-10-11-01 交换后: 11-01-11-10 在一次采访中有人问我! 解决方案 使用伪代码: x =((x& 0b10101010)>> 1)|((x& 0b01010101) ..
发布时间:2021-04-15 19:54:09 其他开发

x86 XOR操作码差异

看着 http://ref.x86asm.net/coder32.html 我发现了两个符合该语句的操作码 异或eax,eax 1)操作码31 XOR r/m16/32 r16/32 2)操作码33 XOR r16/32 r/m16/32 都指向操作数1和操作数2的32位寄存器.那么,在对两个32位寄存器进行XOR的特定情况下,有什么区别吗? 解决方案 x86具有2 ..
发布时间:2021-04-15 19:54:05 其他开发

在两个字节之间的给定点交换位

假设我有这两个数字: x = 0xB7y = 0xD9 它们的二进制表示形式是: x = 1011 0111y = 1101 1001 现在我要在给定的点进行交叉(GA),例如从位置4开始. 预期结果应该是: x = 1011 1001y = 1101 0111 按位,该如何实现? 解决方案 我只使用按位运算符: t =(x& 0x0f)x =(x& 0x ..
发布时间:2021-04-15 19:54:02 其他开发

如何获取C中整数的特定位段?

您将获得一个getTemps()函数,该函数返回一个整数,该整数由以下各项组成:每日高温在第20-29位中,在每日最低温度中在10-19中,以及当前温度在0-9中,全部作为2的补码10位整数.编写一个C程序,提取高温,低温和当前温度并打印这些值. 我得到了这种情况.所以我的问题是如何获取整数的特定段. 到目前为止,我有: #includeunsigned cre ..
发布时间:2021-04-15 19:50:34 其他开发

使用按位和运算符c ++

我有以下代码 int n = 50;while(n){//1if(n& 1)cout> = 1;//3} 当我们对数字使用按位和1(& 1)时,我们将获得相同的数字.现在我的问题是c ++如何评估以下表达式:n&1.由于: n = 50二进制格式50是:110010如果按位1,则得到:AND 1 = 110010现在在 ..
发布时间:2021-04-15 19:50:31 C/C++开发

将位插入uint16_t

在使用 uint16_t 时,是否有任何有效的算法允许将 bit 位插入到 index 位置?我尝试逐位读取 index 之后的内容,将所有这些位存储到 char 数组中,更改 index 处的位,增加 index ,然后再次循环,从数组中插入位,但是有没有更好的方法?因此,我知道如何获取,设置,取消设置或切换特定位,但是我想可能有比逐位处理更好的算法. uint16_t bit_insert ..
发布时间:2021-04-15 19:50:26 其他开发

使用按位运算符消除IF语句

我正在尝试消除IF语句,即如果我收到数字32,我想要一个"1",但是如果我收到其他任何数字,我想要一个"0". 32是0010 0000,所以我想到了将输入的数字与1101 1111进行异或.因此,如果我得到的数字32,我最终会得到11111111. 现在可以用任何方式对各个位进行“与"运算(1111 1111),因为如果我的XOR结果之一为0,则表示我最终的“与"运算值为0,否则为1 ..
发布时间:2021-04-15 19:50:11 C/C++开发