unsigned long long
类型的确切二进制格式是什么(至少在visual studio中)。
我正在使用别名指针进行一些逐位操作,我通过unsigned char
指针上的操作设置该位,然后对unsigned long long
指针(别名)执行一些其他操作。
unsigned long long
的格式看起来很奇怪,因此,它会使结果陷入混乱,似乎位移操作也表现得很奇怪:
从位掩码测试看,这个数据似乎是从right: LSB->MSB : left
排列的,这意味着>> shift会将数据转移到更重要的位而不是更少的位,这是正确的吗?
编译器是ICC 13.0,操作系统是Windows 7-64。
答案 0 :(得分:2)
您描述的字节布局是小端,这是英特尔处理器一般使用的布局。位移不依赖于数字的内存布局,而是取决于值,因此字节顺序不应影响操作的值。但是,如果您正在使用指针别名,例如转换为char *
并使用指针算法来提取它的片段,您将获得依赖于字节序的行为,在小端的英特尔处理器上,这可能不是您所期望的