问题:我无法理解IBM article摘录中的数字256(2 ^ 8):
另一方面,如果是的话 big-endian系统,高字节为1 并且x的值是256。
假设数组中的每个元素消耗4个位,那么处理器应该以某种方式读取:1000 0000.如果它是大端,则为0001 0000,因为字节顺序不会影响字节内的位。 [2]文章中对256的矛盾!?
问题:为什么数字256_dec(= 1000 0000_bin)而不是32_dec(= 0001 0000_bin)?
[2] Endian问题不会影响具有单个字节的序列,因为从存储的角度来看,“byte”被视为原子单元。
答案 0 :(得分:2)
因为一个字节是8位,而不是4.无符号整数中的第9个最低有效位的值为2 ^(9-1)= 256。 (最不重要的是值2 ^(1-1)= 1)。
来自IBM文章:
unsigned char endian[2] = {1, 0};
short x;
x = *(short *) endian;
他们是正确的;该值在big-endian上为(short)256,在little-endian上为(short)1。
写出这些位,它是{00000001_ {base2},00000000_ {base2}}的数组。 Big endian会解释从左到右读取的位数组;小端将交换两个字节。
答案 1 :(得分:1)
回答你的后续问题:简而言之,大多数编程语言都没有“数组中元素的默认大小”。
在C语言中(可能是最流行的编程语言),数组元素的大小 - 或者其他任何东西 - 实际上取决于它的类型。对于char数组,元素通常 1个字节。但对于其他类型,每个元素的大小都是sizeof()运算符给出的大小。例如,许多C实现给出sizeof(short)== 2,所以如果你创建一个short数组,它将占用2 * N字节的内存,其中N是元素的数量。
许多高级语言甚至不鼓励您尝试发现数组元素需要多少字节。给定一定数量的字节会使设计人员始终使用那么多字节,这有利于透明度和依赖于其二进制表示的代码,但是当出于某种原因改变表示时,后向兼容性很差。
希望有所帮助。 (在我写完第一个版本之后,我才看到其他评论。)
答案 2 :(得分:1)
256 dec 不是1000_0000
bin ,它是0000_0001_0000_0000
bin 。
使用交换字节(1字节= 8位),这看起来像0000_0000_0000_0001
bin ,即1 dec 。