隐藏在自动类型转换后的错误

#include <stdio.h>

int main()
{
    char key = 0x80;
    int a = 0x12345678;
    printf("%0x/n", a|key);
    
    return 0;    


上面这段代码的输出是什么?
是123456f8?
不是
是fffffff8

可能结果不是写这段代码的人预料的了
key在与a执行 | 运算之前,被拓展为int
不是拓展为0x00000080,而是0xffffff80
于是有了上面的结果哦

就是这个问题导致了blowfish加密算法原公开实现代码的bug,详情参加
http://www.schneier.com/blowfish-bug.txt

你可能感兴趣的:(隐藏在自动类型转换后的错误)