类型转换和位操作之谜

时间:2017-01-22 09:26:13

标签: c casting bit-manipulation

$item1="50,000.00";
$item2="1,000.00";

echo $total=(number_format($item1+$item2,2));

为什么“combined_value1”的值错了?这里球和傻瓜的值从0到15,我试图将combined_value连接为{ball [4 bits]:傻瓜[4位]:[8个零位]}。

1 个答案:

答案 0 :(得分:5)

+的{​​{3}}高于<<,所以

((uint16_t)ball)<<12+((uint16_t)fool)<<8;

评估为

((uint16_t)ball) << (12+((uint16_t)fool)) << 8;

请注意(uint16_t)投射在此背景下没有多大意义,因为在int升级之后。相反,请考虑

uint16_t combined_value = (uint16_t)((ball<<12) + (fool<<8));

还有其他一些多余的铸件。正如 @StoryTeller 建议的那样,最好包含stdint.h