我正在尝试在程序集中编写一个函数(但我们假设语言与该问题无关).
如何使用按位运算符将传入的数字的所有位设置为1?
我知道我可以使用带有我希望设置的位的掩码的"或",但我不知道如何根据N大小的二进制数构造掩码.
小智 57
〜(x&0)
x&0将始终为0,并且〜将所有位翻转为1.
你会发现用汇编语言你必须知道"传入的数字"的大小.在汇编语言中,汇编语言适用于哪台机器真的很重要.
鉴于这些信息,您可能会问
要么
要填充所有1位的寄存器,在大多数机器上,有效的方法需要两条指令:
使用专用清除指令清除寄存器,或者立即加载0,或者将寄存器与自身进行xor清除.
取寄存器的按位补码.
用1位填充内存则需要1个或更多存储指令......
你会在Hank Warren的精彩书籍Hacker's Delight中找到更多有点蠢蠢欲动的提示和技巧.
将其设置为-1. 这通常用所有位都为 1 来表示。