回答編集履歴

2

補足説明

2019/10/25 09:30

投稿

qax
qax

スコア622

test CHANGED
@@ -9,3 +9,45 @@
9
9
  print(hex((0xffff + 0xffff) & 0xff))
10
10
 
11
11
  ```
12
+
13
+
14
+
15
+ 追記
16
+
17
+
18
+
19
+ 0xff + 0xff の結果は 0x1fe ですね。
20
+
21
+ これを2進数に変換すると、
22
+
23
+
24
+
25
+ 0001 1111 1110
26
+
27
+
28
+
29
+ になると思います。
30
+
31
+ これに対して0xff(2進数で 0000 1111 1111) の論理積(すなわちbitごとのand)をとると、
32
+
33
+
34
+
35
+ 0001 1111 1110
36
+
37
+ 0000 1111 1111
38
+
39
+ ーーーーーーーー
40
+
41
+ 0000 1111 1110
42
+
43
+
44
+
45
+ となります。
46
+
47
+ したがって、計算結果と0xffの論理積をとることは、2進数の下8桁(16進数の下2桁)を残すことに等しいのです。
48
+
49
+
50
+
51
+ ですから、例えば、16進数の下1桁を残したい場合は0xfとの論理積をとればよいですし、
52
+
53
+ 下3桁を残したい場合は、0xfffとの論理積をとればよいのです。

1

微修正

2019/10/25 09:29

投稿

qax
qax

スコア622

test CHANGED
@@ -1,4 +1,4 @@
1
- 演算結果と0xffの論理をとります。
1
+ 演算結果と0xffの論理をとります。
2
2
 
3
3
 
4
4