地址及优先级的有关问题

地址及优先级的问题
Question 1:
C/C++ code

    cout<<sizeof(float)<<endl;
    float a = 1.0f;
    float b = 0.0f;
    cout<<&a<<endl;
    cout<<&b<<endl;
    cout<<((int)(&a)-(int)(&b))<<endl;


为什么会是(int)(&a)-(int)(&b) = 12 ??我觉得是4才对啊

Question 2:
unsigned char a =0xA5;
unsigned char b=~a>>4;
cout<<(int)b<<endl;
《程序员面试宝典》上说>>的优先级比~要高,但是《The C programming language》上2.12节说是~的优秀级高。
但计算结果确实是先计算>>再计算~。怎么解释??

------解决方案--------------------
1.计算两个变量地址间的差值,没什么意义。
2.看标准吧。拿不准就打括号,还方便代码阅读。
------解决方案--------------------
探讨
《程序员面试宝典》上真的是那么解释的?真实扯淡啊

------解决方案--------------------
探讨
引用:

1.计算两个变量地址间的差值,没什么意义。
2.看标准吧。拿不准就打括号,还方便代码阅读。

理论上问题1的地址相差为4才对,为什么差了12字节?