对The C Programming Language 中符号与无符号比较一段话的疑惑~指点迷津。

lin_style 2006-01-03 01:31:14
原话如下:

当表达式中包含u n s i g n e d类型的运算分量时,转换规则要复杂一些。主要问题是,在有符号
值与无符号值之间的比较运算取决于机器,因为它们取决于各个整数类型的大小。例如,假定
i n t对象占1 6位,l o n g对象占3 2位,那么,-1L < 1U,这是因为i n t类型的- 1 U被提升为signed long
类型;但-1L > 1UL,这是因为- 1 L被提升为unsigned long类型,因此它是一个比较大的正数。


-1L < 1U 我的理解是,1U类型向-1L类型转换。变为 ,-1L < 1L 所以大
-1L > 1UL 这个就不懂了,-1L转为unsigned long,变为,1L,那1UL>1UL? 这个就不懂了。。。指点指点,,新手ING~~
...全文
122 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
vollin 2006-01-03
  • 打赏
  • 举报
回复
强制类型转换是不会修改内存中的值,直接把该类型变成其它类型。
对于内存值 
0xFFFFFFFF是有符号时表示-1,是无符号时表示4294967295(32位整型的最大值)
对于内存值
0x00000001是有符号时表示1,是无符号时还是表示1。
B828 2006-01-03
  • 打赏
  • 举报
回复
楼主都知道,当比较-1L和1UL的时候,把-1L转换成unsigned long,其实并不改变它的值,他的值还是0xffffffff,>号右边的还是1UL,十六进制是0x00000001,当然是-1L > 1UL了。
lin_style 2006-01-03
  • 打赏
  • 举报
回复
先闪了。上课去了。
shenmea00000 2006-01-03
  • 打赏
  • 举报
回复
学习中,~~~~~~~~~~~~~~~
lin_style 2006-01-03
  • 打赏
  • 举报
回复
那1UL>1UL
都成了FFFFFFFF
不就相等了吗?

楼上的可以说得清楚些吗,谢谢~
vollin 2006-01-03
  • 打赏
  • 举报
回复
考虑一下实际的存储就知道了
以32位机示例:
-1实际上是FFFFFFFF
所以变成无符号就实际是最大的整数。
lin_style 2006-01-03
  • 打赏
  • 举报
回复
等好久了呢,要上课了。 。。。。
lin_style 2006-01-03
  • 打赏
  • 举报
回复
555~~~
无人帮帮忙吗
lin_style 2006-01-03
  • 打赏
  • 举报
回复
自己顶个先

70,020

社区成员

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

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