2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

プログラミング得意な奴ちょっと来い

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 ★