■ このスレッドは過去ログ倉庫に格納されています
プログラミング得意な奴ちょっと来い
- 1 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:14:50.913 ID:KxyZ7gyrd.net
- アセンブリでビット列を右寄せするにはどうしたらいい?
- 2 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:17:35.009 ID:jHH0bny30.net
- わかんないけどCtrl + Shift + R
- 3 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:18:59.686 ID:HEhea1cZp.net
- >> 任意の数
- 4 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:20:00.438 ID:GgFplvU90.net
- ビット列を右寄せって ビット操作?(´・ω・`)
C言語でビット操作書いて ディスアセンブリ すればいいんじゃない?(´・ω・`)
- 5 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:20:39.899 ID:S0CPSpdj0.net
- アセンブリ言語だとCPU依存なので何とも言えないけど、
一般的にはビットシフト命令があるからそれを使う
- 6 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:21:27.227 ID:GgFplvU90.net
- ぶっちゃけいうと アセンブリ によって書き方全然違う(´・ω・`)
だから C言語操作を ディスアセンブラ とかで変換したほうがすぐにわかると思う(´・ω・`)
- 7 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:22:21.377 ID:6WuZ5OgTd.net
- 講義の課題は自力でやろう
- 8 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:22:25.695 ID:D2352AQm0.net
- Windowsキー+anal
- 9 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:23:05.513 ID:DY9stCGgd.net
- すまん聞き方が悪かった
C言語でもいいんだが、要は加算とかシフト演算とかアセンブリで使うような演算使ってビット列を右寄せして欲しい
ループとか除算とかコスト掛かりそうな演算はなるべく避ける方向で
- 10 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:23:07.667 ID:GgFplvU90.net
- MIPSとかの講義かな?(´・ω・`)
- 11 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:23:27.608 ID:DY9stCGgd.net
- 講義ではない
勝手に思った
- 12 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:24:47.771 ID:GgFplvU90.net
- >>11
c言語 ビット演算で検索(´・ω・`)
- 13 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:25:14.151 ID:1fXWIQpq0.net
- 右寄せの意味がわからない
- 14 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:26:23.670 ID:dV/GdsKS0.net
- コードなしで質問するやつってセンスないよね
- 15 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:26:31.258 ID:ehokODvKd.net
- >>13
1010→0011
- 16 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:26:41.388 ID:DY9stCGgd.net
- >>13
0100101111000000なら
0000000100101111だな
- 17 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:26:59.467 ID:GgFplvU90.net
- >>13
ビットリバーサル とか FFTとか自作でもやってるんかな?(´・ω・`)
- 18 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:27:17.931 ID:S0CPSpdj0.net
- valをn桁だけ右シフトする関数
チェックとかそういうのはめんどくさいからつけてない
uint32_t hoge( uint_32_t val, int n)
{
return val >> n;
}
- 19 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:28:56.524 ID:GgFplvU90.net
- >>16
なんで0を消したいんだ?(´・ω・`)
- 20 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:29:43.693 ID:M+9WD5j80.net
- え、ビットシフトのことなの?
- 21 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:30:26.055 ID:deU7V8ot0.net
- 板違い
- 22 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:31:23.231 ID:S0CPSpdj0.net
- 最下位の1が0桁に来るように右シフトする関数
uint32_t hage( uint32_t val)
{
uint32_t cnt = 0;
if( !val) return val;
while( ( val >> cnt++) & 0x00);
return val >> cnt;
}
- 23 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:32:19.140 ID:cBR8p4mKd.net
- >>22
なるべく条件分岐は使いたくない
- 24 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:32:25.865 ID:1TB2i5qG0.net
- 下位に0が並ぶ数だけビットシフトしたい、ってことでいいの?
- 25 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:33:16.380 ID:GgFplvU90.net
- 16進数で下位4ビットの0のときのパターンってどうなんかな(´・ω・`)
0xfe 0xfd 0xfc 0x fb 0x fa ・・・・・
なんか簡単なパターンありそうだな(´・ω・`)
- 26 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:34:36.533 ID:1TB2i5qG0.net
- 一番下のビットだけ残すのが(-n & n)だから、
n ? n / (-n & n) : 0;
でよくね?
- 27 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:36:31.323 ID:3hOr87EPa.net
- 除算使えばできるけど、そもそも除算自体がコストかなり高いぞ
- 28 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:37:14.039 ID:dV/GdsKS0.net
- 書いてみたぞ
c++書けるやつ添削してくれ
https://repl.it/@vip0/bitunpad#main.cpp
- 29 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:37:27.569 ID:1I33lhl40.net
- 最近のx86ならpopcountして、1をpopcount分左シフトして1引けばいい
popcountも分岐なしでできるアルゴリズムあるはずだから命令なくてもまぁいける
- 30 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:38:24.921 ID:1fXWIQpq0.net
- >>26
これが一番コスト低そう
- 31 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:41:05.333 ID:1I33lhl40.net
- もし__popcount関数でビット数をカウントできるとするなら、
int count = __popcount(x);
int ans = (1 << count) -1;
みたいなノリで行けると思う
- 32 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:43:02.139 ID:S0CPSpdj0.net
- 俺のオリジナルじゃないけど、2の補数をうまく使った超絶技巧
uint32_t hoge( uint32_t val)
{
return val >> (( val & -val) - 1);
}
- 33 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:43:03.295 ID:3hOr87EPa.net
- ビットの並び逆にして乗算すれば除算なしでいけるかも
- 34 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:44:23.492 ID:pMmUSdwzd.net
- お前らありがとう
これでレポート提出できるわw
- 35 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:48:18.884 ID:GgFplvU90.net
- >>22
それ while ちゃんと動くか?(´・ω・`)
- 36 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:49:29.099 ID:zbd8j/DF0.net
- 普通のCPUならシフト用の命令が存在するんじゃない?
C言語でシフト演算子(>>)使えば、コンパイラが勝手にそれを使うようにコンパイルしてくれるはず
アセンブラでちゃんと使いたいなら、CPUの命令セット調べれば
- 37 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:50:51.116 ID:S0CPSpdj0.net
- >>35
動くよ
- 38 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:55:31.551 ID:dV/GdsKS0.net
- >>32
うそ!まさかO(1)できるの!?って感動して実行してみたら0になった
- 39 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:56:32.413 ID:GgFplvU90.net
- >>37
例えばこういうとき
while( ( 0x34 >> cnt++) & 0x00);
( 0x32 >> cnt++) & 0x00 が0になって 次回のwhile が無視されないか?(´・ω・`)
- 40 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:57:24.969 ID:nE478cZgd.net
- いや何だよちゃんと動くもの教えて😡
- 41 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:58:44.412 ID:dV/GdsKS0.net
- >>40
>>28 のリンク開いて実行してみろよ
- 42 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 14:58:47.343 ID:1S7I0I6Zd.net
- お前らdクス
むしろpopcountのアルゴリズム見てなんだこのオシャレなアルゴリズムはと思って
右寄せにもそんなアルゴリズムあるのかな…と思って聞いてみたのだ
結局-n & n -1をpopcountしてシフトさせるのが良さそうだな
- 43 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:04:03.910 ID:S0CPSpdj0.net
- >>39
間違ってるね
while( !( 0x34 >> cnt++) & 0x01))
だね
- 44 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:05:26.987 ID:GgFplvU90.net
- while((val&0x01)==0){
val=val>>1;
}
コレじゃあ感の?(´・ω・`)
- 45 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:06:31.643 ID:GgFplvU90.net
- 可読性考えると>>44がわかり易くないか?(´・ω・`)
- 46 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:06:53.048 ID:zBHXSBOsd.net
- >>44
条件分岐は高コストなのだ
- 47 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:07:34.552 ID:GgFplvU90.net
- >>46
多少のコストなら 可読性優先するべきだろ(´・ω・`)
- 48 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:09:42.811 ID:zBHXSBOsd.net
- >>47
それはもっと高級言語の話だな
基礎演算の設計は最適化が優先される
- 49 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:10:44.821 ID:S0CPSpdj0.net
- >>44
何の問題もない
>>44の方が一般的な書き方だと思う
- 50 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:11:57.778 ID:zBHXSBOsd.net
- そもそも多少どころか数百倍違うはず
- 51 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:12:14.520 ID:GgFplvU90.net
- while((val&0x01)==0){
if(val==0){
break;
}
val=val>>1;
}
これでなんかあっても無限ループは回避できるし(´・ω・`)
- 52 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:15:38.373 ID:N9DaMJKAd.net
- 低級言語で条件分岐や除算を回避するのは高級言語で言えばデータベースへのアクセスを回避するようなもの
可読性のためにデータベースに何度でも取りに行くみたいなコード書く奴はおらんだろ
- 53 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:16:21.441 ID:GgFplvU90.net
- >>50
バタフライ演算みたいにコストが高いとこは 可読性犠牲にして
速度重視したほうが圧倒的に有利だけど コレくらいのコストなら可読性重視やろ(´・ω・`)
- 54 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:17:20.325 ID:GgFplvU90.net
- あと速度がネックになるのはだいたい通信シーケンスだから
確実性や可読性のほうが大事(´・ω・`)
- 55 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:18:53.894 ID:GgFplvU90.net
- >>51
これなら 途中で EMPでレジスタが書き換わっても 無限ループにはならないやろ?(´・ω・`)
- 56 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:26:28.879 ID:8JKO63hi0.net
- 将来役に立たないクソ問題だな
- 57 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:30:34.159 ID:GgFplvU90.net
- FFT とかでビット演算処理結構使う(´・ω・`)
ビットの入れ替えパターンで結構混乱するからやっといて損はない(´・ω・`)
- 58 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:46:16.232 ID:hsxWLNv/d.net
- こうなるからアセンブリでって話になるんだな
- 59 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:46:42.873 ID:Tbla8ML60.net
- >>44の分岐で数百倍のオーバーヘッドがでると思ってんなら1から回路の勉強しなおせ
GNU初期版のような汎用性重視でルックアヘッドクリアと
ロードストア繰り返すマシンコードを吐くコンパイラなんてもう存在しないわw
ローテートとANDでマシンコードベタ書きしても>>44のシーケンスになる
まぁ計算機科学の基礎を知らん土方に将来なんてもんはないから知らんでもいいことだがなw
- 60 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 15:50:33.090 ID:VK24O27vd.net
- コンパイラの問題なら尚更アセンブリでってのは正解だったんだな
- 61 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 16:18:21.360 ID:Tbla8ML60.net
- >>60
ぜんぜんちがうわwやっぱアセンブリ云々いう奴は大概ズレてるなw
やっぱ高等教育うけてないと馬鹿が馬鹿に騙されてアセンブリ信仰におちいってしまうのか?
>>54の指摘が核心ついてて
ALUとMMUとFSBのどこに作用すんのか?FSBを抜けてしまうか?って問題だから
まず擬似言語にあたる高級言語でステップ整理ができてないと話しにならん
そんでどのLSIに分担させるかというアプローチに移行するからw
8ビット時代じゃあるまいしニーモニックとオペコードは1:nだからな?
オーバーヘッド云々の話するならアセンブルかけたあとの
フラットマシンコードがどうなるかを想定しないとLSIとの作用はわからんわw
- 62 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 16:35:13.476 ID:8m28mvUSd.net
- 条件分岐や除算ってコスト掛かるよねって話にロードストアの話する方が大分ズレてる気が…
- 63 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 16:45:03.186 ID:Tbla8ML60.net
- >>62
で>>44は条件分岐や除算ってコスト掛かるよねって話だったのか?
>>44のどこに除算があるんだ?
費用やオーバーヘッドの論点から急に限定しだしたけどおまえ日本語読める?
それに対してアセンブリ云々だぞ?
おまえはズレてるどころかただの馬鹿だな
オーバーヘッドで考慮すべき論点は条件分岐や除算だけなんか?
- 64 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 16:47:05.812 ID:G7lCl5770.net
- 急に荒れ始めたな
- 65 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 16:47:20.293 ID:G7lCl5770.net
- これだからプログラミングスレは
- 66 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 16:48:14.515 ID:kc84Utd9M.net
- 相変わらず(´・ω・`)ガイジが的外れにイキってるな
- 67 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 16:48:32.951 ID:WzlXQ8PP0.net
- 技術者は短気だからな
- 68 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 16:49:49.632 ID:37d9HUN+d.net
- スレ最初から読めばわかるんじゃないか?
条件分岐や除算レベルの話でアルゴリズム教えてってのが元題なんだから
ああロードストアは関係無いのねって理解しそうなもんだが
- 69 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 16:51:49.308 ID:37d9HUN+d.net
- >>66
これ同一人物なんか?
- 70 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 16:55:59.187 ID:Tbla8ML60.net
- >>68
なにいってんだ?
>>44のステップに対して数百倍のオーバヘッドなんてないねって話に対しての補足なんだから
スレの最初の話とか関係あるか?
そもそも
>これが一番コスト低そう
とかいったレスは無視か?
このスレは除算と分岐を使わない方法を考えようスレだに認定する発想が意味わからん
- 71 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 16:56:13.764 ID:AU+kUmh+0.net
- プログラミングむずい
- 72 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 16:57:34.408 ID:37d9HUN+d.net
- いや質問主が言ってるんだし…
だからこそ>>26は採用されなかったんでしょ
- 73 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 17:00:37.897 ID:Tbla8ML60.net
- >>72
いや日本語読める?
>>1はコストかからない速度をもとめてるってだけで
除算と分岐はただの例示やんけ
>>1の命題は除算と分岐を使わないことだったとでもいいたいんかw
- 74 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 17:01:31.409 ID:p6dHiDeQd.net
- 除算とか条件分岐とかそのレベルの話をして欲しいっていう例示でしょ
- 75 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 17:03:43.951 ID:Tbla8ML60.net
- >>74
除算と分岐のコストはLSIによってきまるよね?
そのレベルってどのレベル?
計算量といった理学の話であったらアセンブリはなおさら的外れだぞ?
- 76 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 17:04:28.391 ID:U6bvk5rGd.net
- 計算量はロードストアより更にぶっ飛びすぎでしょ…
- 77 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 17:06:14.226 ID:Tbla8ML60.net
- >>76
ようするにレベルレベルといいながらどのレベルの話かすら提示できんのね
話をうやむやにして誤魔化す
まさに卑怯者のやることだな
- 78 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 18:01:05.258 ID:A+8NfqoFd.net
- ほっほ
- 79 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 18:05:48.796 ID:8JKO63hi0.net
- 血糖値だろ血糖値
- 80 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 18:49:39.943 ID:1I33lhl40.net
- 分岐やループ(≒ジャンプ命令)が高コストと考えた時どうするか?のスレなんだからいいじゃない
実際最近のプロセッサでも分岐の高速化はかなり大変なわけだし、考えること自体は間違いじゃない
- 81 :以下、?ちゃんねるからVIPがお送りします:2020/07/25(土) 19:20:03.315 ID:Tbla8ML60.net
- >>80
はぁ・・・
>分岐やループ(≒ジャンプ命令)が高コスト
この辺からしてもうダウトなんだよ
ローレベルにおける分岐のステップやクロック数
分岐の費用の主要因わかってねーやつらがなに考えるんだ?
分岐のどの段階が高費用になるんだ?いってみろや
フレーム設定の違う話をアセンブリ()で丸めてドヤってるアホはマジで氏ね
まぁ>>67に突っ込みいれられてちょっと反省したが
なんちゃってローレベル野郎たちのプログラスレでのイミフな嘘と暴れっぷりがあまりにもムカついたんでね
短気といわれればそれまでやがアセンブリ教の狂信者へのヘイトが溜まってたんで
純粋にプログラミング楽しんでる人にはすまんかったわ
C#やPHPで頑張ってる子たちがアセンブリかじって嘘撒き散らすアホより駄目とか全然ないからな?
総レス数 81
21 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★