读书人

c语言求signed类型字符的最大值?解决

发布时间: 2012-06-05 13:54:06 作者: rapoo

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 数学右移 和 逻辑右移

读书人网 >C语言

热点推荐