我在64位英特尔处理器上工作...我正在学习大端和小端,我理解的是这些是一个字内的字节排序,这样在64位数据中,msb将具有大端格式的最低地址和小端形式的最高地址...现在我有一个问题:
我写了this code
确定我的处理器是小端还是大端...
我输入
0102030405060708 (this is in hex)
并希望得到 08
和 07
和 06
以及...和 01
作为答案
但取而代之的是 0
和 25
和 50
以及 -125
和 -13
以及 501
和 -41
以及 66
.
当我用's'作为2字节(短)编写相同的代码时, 0102
的输出是 2
和 1
(这与小端一致)...所以这里出了什么问题?
2 回答
您将输入值存储为
double
,它将值存储为floating point值 . 尝试使用long long
而不是64位整数,并且应该按预期存储该值 .将十六进制数字放入
(double)
不太可能达到预期效果;它是一个由基数2尾数和指数组成的浮点值 . 您可能会发现(long)
或(long long)
更接近您的意图 .