Language agnostic 更改文件中的1位。我做错了什么?

Language agnostic 更改文件中的1位。我做错了什么?,language-agnostic,byte,bit,Language Agnostic,Byte,Bit,我有一个包含以下内容的文件: 00 00 00 00 00 我变了一点。更改的文件: 00 60 00 00 00 我的老师说,我不知道什么是比特。我做错了什么?请为我澄清一下:文件有5个块(10位)。位为00?或位是对的0-1位。谢谢。这取决于该符号的含义,但我假设它以十六进制符号显示5个字节 这些是二进制表示法中的8位字节: 00000000 00000001 00000010 ... 00 01 02 ... 这些字节以十六进制表示法表示: 00000000 00000001 00

我有一个包含以下内容的文件:

00 00 00 00 00
我变了一点。更改的文件:

00 60 00 00 00

我的老师说,我不知道什么是比特。我做错了什么?请为我澄清一下:文件有5个块(10位)。位为
00
?或位是对的
0
-1位。谢谢。

这取决于该符号的含义,但我假设它以十六进制符号显示5个字节

这些是二进制表示法中的8位字节:

00000000
00000001
00000010
...
00
01
02
...
这些字节以十六进制表示法表示:

00000000
00000001
00000010
...
00
01
02
...

十六进制表示法从
00
FF
,相同值的二进制表示法从
00000000
11111111
。如果将
00
更改为
60
,则将
00000000
更改为
01100000
。因此您更改了2位。

您正在十六进制编辑器/查看器中查看文件。每个数字是一个十六进制数字,由四个二进制位组成。您从
00
变为
60
意味着您更改了其中一个十六进制数字中的两位。如果以二进制模式查看,则除了0和1之外,不会看到任何其他内容

hex 0  == binary 0000
hex 6  == binary 0110

我建议大家复习一下二进制和十六进制表示法

如果这是十六进制表示法,那么您会有一些术语混淆

 00  00  00  00  00
|__|          ^
  \           |
   byte     nibble
一个字节是两个半字节,一个半字节是4位

Decimal   Hex     Binary
   0       0       0000    <- You went from here...
   1       1       0001
   2       2       0010
   3       3       0011
   4       4       0100
   5       5       0101
   6       6       0110    <- ...to here, a change in two bits of one nibble.
   7       7       0111
   8       8       1000
   9       9       1001
  10       a       1010
  11       b       1011
  12       c       1100
  13       d       1101
  14       e       1110
  15       f       1111
十进制十六进制二进制

0 0 0000听起来您首先需要研究位是什么(例如)。您更改了两位而不是一位。位是“二进制数字”(0或1)。
6
110
。所以你想要从零到110,这意味着两位变为1。一个字节是8位,您显示的数字可能是字节(两个十六进制数字)的十六进制(以16为基数)表示。我已经用十六进制表示法给你写了数据。所以,在我更改的文件中,我只更改了1位,对吗?不,您更改了2位。从
0000b
0110b
是两位的变化。半字节是位,对吗?我在十六进制编辑器中打开了256个空字节的文件。文件内容为16行:
00 00 00 00
。我现在得换一点<代码>00 00 00 00 01
:带有一个更改位的空字节序列。对吗?一个半字节是4位。十六进制编辑器中的每个“0”表示位“0000”。“1”表示位“0001”。两者之间有一个差值,是的。<代码> 00、00、00、00、00、00、00、01、00、00、00、00、00、x、< /代码>如果我在那个序列的中间改变了一点,我能说“位”被改变了吗?是的,如果你把一个字节的一个字节变成了任何一个字节,或者,你只改变了一个比特。0位是0000,1位是0001,2位是0010,以此类推(见答案中的表格)。在典型的计算机上,您必须按字节(一对半字节)进行读写。最简单的方法是2次幂的异或操作,在写回前翻转单个字节的单个位。