在上下文及头文件均正常的情况下,下面代码的输出是什么?
auto fn = [](unsigned char a){ cout << std::hex << (int)a << endl; }; fn(-1);
unsigned char a的取值范围是0-255,0-1得到最大值255(254=0-2,253=0-3,...),255+1得最小值0(1=255+2,2=255+3,......)
所以-1=0-1=255
补码1111 1111 1111 1111(求反加一)
则fn()后8位为1111 1111
int 后0000 0000 1111 1111
Hex16进制后ff
int型-1的存储方式为补码(32位,4字节),1111 1111 1111 1111
转换为unsigned char(8位,1字节)发生字节截断,取最后八位为1111 1111 ;
再转换为int后为0000 0000 0000 0000 0000 0000 1111 1111 ,即为ff