質問編集履歴

1

追記

2020/01/24 08:34

投稿

JanTh1989
JanTh1989

スコア87

test CHANGED
File without changes
test CHANGED
@@ -1,30 +1,52 @@
1
- 変数の持っている値を、指定ビット以降上書きしたいす。
1
+ 変数の持っている値を、指定ビット以降を開始ビットとして上書きし、データ型上の残っビットはもう一つ変数を用意して、先頭ビットから上書きする、とった動作を行おうとしています。
2
2
 
3
- 組み思ってたものになったのですが、本当にでよいのか、と悩んでおります。
3
+ ひとまずんで結果想定通りになのですが、ビット演算の使い方が、ういうものでよいのか、と悩んでしまっております。
4
4
 
5
5
 
6
6
 
7
- 以下のように作ってみたのですが、ビットシフト行ったり来たりこういうもののかがなんとも言えませんした
7
+ 以下のように作ってみたのですが、「DWORD d2」で使っているシフト演算は、行ったり来たりになっており、なんとも言えないところ
8
8
 
9
9
  もっとスマートな方法があれば、ご教授願いたく思います。
10
10
 
11
11
 
12
12
 
13
- ```ここに言語を入力
13
+ ```C++
14
14
 
15
15
  int _tmain(int argc, _TCHAR* argv[])
16
16
 
17
17
  {
18
18
 
19
- DWORD d = 65535;
19
+ DWORD d = 4294967295;
20
20
 
21
- DWORD d2 = 0;
21
+ DWORD bitSize = 32;
22
22
 
23
23
  WORD target = 0;
24
24
 
25
25
  cin >> target;
26
26
 
27
+ WORD blockCount = 1;
28
+
29
+ if (target > 0)
30
+
31
+ blockCount++;
32
+
33
+ std::vector<DWORD> list;
34
+
35
+ for (int i = 0; i < blockCount; i++)
36
+
37
+ {
38
+
27
- d2 = (d >> target) << target;
39
+ DWORD d2 = (d >> target) << target;
40
+
41
+ list.push_back(d2);
42
+
43
+
44
+
45
+ d = d >> (bitSize - target);
46
+
47
+ target = 0;
48
+
49
+ }
28
50
 
29
51
  return 0;
30
52
 
@@ -34,14 +56,40 @@
34
56
 
35
57
 
36
58
 
37
- 入力4だと以下ような結果。
59
+ 入力値:0目標結果。
38
60
 
39
61
  <入力>
40
62
 
41
- d = 1111111111111111(65535
63
+ d = 111111111111111111111111111111114294967295)
42
-
43
- target = 4
44
64
 
45
65
  <結果>
46
66
 
67
+ list[0] = 11111111111111111111111111111111(4294967295)
68
+
69
+
70
+
71
+ 入力値:1の目標結果。
72
+
73
+ <入力>
74
+
75
+ d = 11111111111111111111111111111111(4294967295)
76
+
77
+ <結果>
78
+
79
+ list[0] = 11111111111111111111111111111110(4294967294)
80
+
81
+ list[1] = 00000000000000000000000000000001(1)
82
+
83
+
84
+
85
+ 入力値:15の目標結果。
86
+
87
+ <入力>
88
+
89
+ d = 11111111111111111111111111111110(4294967294)
90
+
91
+ <結果>
92
+
47
- d2 = 1111111111110000(65520
93
+ list[0] = 111111111111111110000000000000004294934528
94
+
95
+ list[1] = 00000000000000000111111111111111(32767)