【超高速】C/C++に代わる低級言語を開発したい 8 (364レス)
前次1-
抽出解除 レス栞

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
327
(3): 2025/03/24(月) 13:15:17.83 ID:a0wY9RFf(1)調 AAS
>>326
外部リンク:docs.rs がいいかな

use bit_vec::BitVec;

fn main() {
 // 32bit全てfalseで作成
 let mut bv = BitVec::from_elem(32, false);
 // 7bitおきにtrueセット
 for index in (0..32).step_by(7) {
  bv.set(index, true);
 }
 // 0, 7, 14 , 21, 28番目のbitがtrueになった
 assert_eq!(bv.get(0), Some(true));
 assert_eq!(bv.get(1), Some(false));
 assert_eq!(bv.get(7), Some(true));
 assert_eq!(bv.get(28), Some(true));
 // イテレータでtrueになってる位置のリスト
 let v = bv.iter().enumerate().filter_map(|(i, bit)| bit.then_some(i)).collect::<Vec<_>>();
 assert_eq!(v, [0, 7, 14, 21, 28]);
 
 // 内部構造は標準でVec<u32>を使っているのでu32が1つ分
 assert_eq!(bv.storage(), [0b_10000001000000100000010000001]);
 // バイト列にすると4バイト
 assert_eq!(bv.to_bytes().len(), 4);
 assert_eq!(bv.to_bytes(), [0b_10000001, 0b_00000010, 0b_00000100, 0b_00001000]);
}
330
(1): 2025/03/25(火) 03:40:11.48 ID:ztarSHRB(1/2)調 AAS
>>327
なんか左右逆で気持ち悪い(bigendian/littleendianともちょっと違う)
bv.set(31, true);
bv.set(32, true);
assert_eq!(bv.to_bytes(), [
0b_10000001, // 0-
0b_00000010,
0b_00000100,
0b_00001001,
0b_10000000]); // 32-
assert_eq!(bv.storage(), [
0b_10010000001000000100000010000001,
0b_1]);
332: 2025/03/25(火) 08:41:39.56 ID:ztarSHRB(2/2)調 AAS
>>327
ありがとう。参考になりました。

多倍長整数の論理演算でbit立てる方法があったので、
それを使ったら簡単で速度もそこそこ出たので満足しました。
>>327 さんのものは不採用です。
341: 2025/03/27(木) 10:02:25.16 ID:vU3T1Sq/(5/7)調 AAS
ああこっちか
外部リンク:crates.io

>>328
それは >>327 の中にリンクがあったので既視です??
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.021s