簡體   English   中英

在沒有 for 循環的情況下設置 integer 中的每個第 n 位

[英]Set every nth bit in an integer without for loop

有沒有辦法在不使用 for 循環的情況下設置 integer 中的每個第 n 位?

例如,如果n = 3 ,那么結果應該是...100100100100 使用 for 循環很容易做到這一點,但我很好奇這是否可以在沒有循環的情況下完成。

--

對於我的特定應用程序,我需要使用自定義 256 位 integer 類型來執行此操作,該類型具有內置 integer 具有的所有位操作。 我目前正在使用延遲初始化的表(使用 for 循環),這對於我正在做的事情來說已經足夠了。 對我來說,這主要是一個有點旋轉的練習,但我無法通過幾個步驟/說明來弄清楚如何做到這一點,也無法輕易在網上找到任何關於此的內容。

…我需要使用自定義的 256 位 integer 類型來執行此操作。

r設置為256 % n

d設置為((uint256_t) 1 << n) - 1 那么d的二進制表示是一個n 1 位的字符串。

t設置為UINT256_MAX << r >> r 這將從UINT256_MAX中刪除頂部r位。 UINT256_MAX當然是 2 256 -1。 這將t保留為width-r 1 位的字符串,而width-rn的某個倍數,例如k*n

t設置為t/d 作為一串k*n 1 位除以一串n 1 位,這將產生一個000…0001重復k次的商,其中每個000…0001n-1 0 位后跟一個 1 位。

現在t是所需的位模式,但如果r不為零,則可能會丟失最高的所需位。 要添加此位,如果需要,或tt << n

現在t是所需的值。

交替:

t設置為 1。

tt << n

tt << 2*n

tt << 4*n

tt << 8*n

tt << 16*n

tt << 32*n

tt << 64*n

tt << 128*n

當移位量超過 integer 寬度,256 位時,必須定義這些移位(移位零就足夠了)或抑制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM