c语言求signed类型字符的最大值?
求signed类型字符的最大值 (char)((unsigned char) ~0 >> 1),不了解执行过程,朋友们给我详细讲解下过程。
[解决办法]
逐层分解。
unsigned char
0 = 0x00 = 00000000
~0 = 0xFF = 11111111
~0 >> 1 = 01111111(无符号数逻辑右移,右侧补零)
char
01111111被解释为 ‘0’ 符号位‘+’, ‘1111111’ = 255
[解决办法]
位运算
首先对unsigned char 类型的0按位逐位取反 然后右移一位 这样就解决了高位的符号位 早吧unsigned转换为singned类型 输出就行了
[解决办法]
我建议楼主单步调试,转到反汇编,然后查看每一步后寄存器的变换就知道了
[解决办法]
uchar是为了右移不填充符号位.
0111 1111不就是signed char最大值吗, ~0不就是全1111 1111吗,(uchar)1111 1111 >> 1不就是0111 1111吗,最后转成char不就是signed char吗,转不转都一样。
[解决办法]
google 数学右移 和 逻辑右移