不同数据类型的二进制格式

时间:2013-02-19 05:30:22

标签: c++ c bit shift

unsigned long long类型的确切二进制格式是什么(至少在visual studio中)。

我正在使用别名指针进行一些逐位操作,我通过unsigned char指针上的操作设置该位,然后对unsigned long long指针(别名)执行一些其他操作。

unsigned long long的格式看起来很奇怪,因此,它会使结果陷入混乱,似乎位移操作也表现得很奇怪:

从位掩码测试看,这个数据似乎是从right: LSB->MSB : left排列的,这意味着>> shift会将数据转移到更重要的位而不是更少的位,这是正确的吗?

编译器是ICC 13.0,操作系统是Windows 7-64。

1 个答案:

答案 0 :(得分:2)

您描述的字节布局是小端,这是英特尔处理器一般使用的布局。位移不依赖于数字的内存布局,而是取决于值,因此字节顺序不应影响操作的值。但是,如果您正在使用指针别名,例如转换为char *并使用指针算法来提取它的片段,您将获得依赖于字节序的行为,在小端的英特尔处理器上,这可能不是您所期望的