求解。

hetuo 2011-04-23 09:07:13
直接计算出signed char的最大值最小值:
printf("Signed char min = %d\n",-(char)((unsigned char)~0 >> 1));
求解释:为什么要先转换成unsigned char 类型??
...全文
97 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2011-04-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hetuo 的回复:]

引用 7 楼 luciferisnotsatan 的回复:

引用 5 楼 luciferisnotsatan 的回复:

(unsigned char)-1

把-1转成unsigned char型。也就是全比特位为1,然后右移一比特位,最高为补0(即符号为变成了0),得到signed char的最大值


嗯,谢谢各位!理解了,如果不是转换成无符号类型,右移后最高位会补一从……
[/Quote]
Bingo, that's it! :)
hetuo 2011-04-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 luciferisnotsatan 的回复:]

引用 5 楼 luciferisnotsatan 的回复:

(unsigned char)-1

把-1转成unsigned char型。也就是全比特位为1,然后右移一比特位,最高为补0(即符号为变成了0),得到signed char的最大值
[/Quote]

嗯,谢谢各位!理解了,如果不是转换成无符号类型,右移后最高位会补一从而计算机会认为存储的是一个负数,从而按求补运算得出的结果为1或者-1.
所以必须转换成无符号类型才能求得最大值~~
luciferisnotsatan 2011-04-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 luciferisnotsatan 的回复:]

(unsigned char)-1
[/Quote]
把-1转成unsigned char型。也就是全比特位为1,然后右移一比特位,最高为补0(即符号为变成了0),得到signed char的最大值
KID_coder 2011-04-23
  • 打赏
  • 举报
回复
为了使char的最高位补零~~
vc里面是算术右移~如果不是unsigned类型~ 最高位是1,不改变符号位~
luciferisnotsatan 2011-04-23
  • 打赏
  • 举报
回复
(unsigned char)-1
delphiwcdj 2011-04-23
  • 打赏
  • 举报
回复
printf("Signed char min = %d\n",~0 );
printf("Signed char min = %d\n",-(char)((unsigned char)(-1) >> 1));
delphiwcdj 2011-04-23
  • 打赏
  • 举报
回复
打印~0看看
hetuo 2011-04-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 msokd 的回复:]

先unsigned char 是为了取得该数的最大表示值
[/Quote]

还是不理解呀~~
MSOKD 2011-04-23
  • 打赏
  • 举报
回复
先unsigned char 是为了取得该数的最大表示值

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧