哪个位是第一位,当你位移时,它实际上是朝这个方向移动的吗?

use*_*993 0 c++

所以...与位和字节搏斗,我想到如果我说"第n个字节的第一位",它可能并不意味着我认为它意味着什么.到目前为止,我假设如果我有这样的数据:

00000000 00000001 00001000

那么

  1. 第一个字节是组中最左边的,其值为0
  2. 第一位是所有0的最左边,其值为0
  3. 最后一个字节是最右边的组,其值为8
  4. 第二个字节的最后一位是中间组的最右边,其值为1

然后我了解到类型化字节集合中的字节顺序由系统的字节顺序决定.在我的情况下,它应该是小端(窗口,英特尔,对吗?)这意味着像01 10作为16位uinteger应该是2551,而在大多数程序处理内存它将表示为265 ..不知道什么是什么去那儿.

我还了解到,一个字节中的位可以按任意顺序进行排序,似乎没有明确的答案,因为它们也可能受到位结尾和人们对首先不同的定义的影响.对我来说,从左到右,对于其他人来说,它可能是当您添加1到0或从右到左时首先出现的内容.

为什么这有关系?好吧,好奇心,但我也试图编写一个能够从位地址Y开始提取X位数的类.我设想它类似.net字符串,我可以去输入".SubArray(12 (位置),5(长度))"然后在这篇文章的顶部的数据的情况下,它将检索"0001 0"或2.

那么有人可以澄清我的环境中的位和字节的第一个和最后一个是什么,它是从右到左,从左到右还是两个,是吗?为什么这个问题首先存在,为什么编码祖先不能就某些东西达成一致并坚持下去呢?

Leu*_*nko 6

移位是算术运算,而不是基于内存的操作:它旨在处理值,而不是其表示.向左移动相当于乘以2,向右移动相当于除以2.这些规则首先存在,如果它们与存储器中多字节类型的位的排列相冲突,那么对于存储器中的排列来说则是如此.(由于移位是检查一个字节内的位的唯一方法,这也是为什么在一个字节内没有有意义的位顺序概念的原因.)

只要您将操作保持在单个数据类型中(而不是对长整数进行字节移位并将它们作为字符序列进行检查),结果将保持可预测.在这种情况下,通过不同的整数类型检查相同的内存块有点像执行整数运算然后将这些位读取为浮点数; 会有一些变化,但它不是整数运算定义的地方说究竟是什么.这超出了他们的范围.