printf("%d",0xffffffff); 这条语句,0xffffffff是原码还是补码?

熊玩意 2013-03-15 01:49:28
printf("%d",0xffffffff); 这条语句,0xffffffff是原码还是补码?
小白不懂
还要求教小类似0x7ffffffff 这类东西的用法,多谢了
...全文
425 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin5161678 2013-03-18
  • 打赏
  • 举报
回复
引用 6 楼 starytx 的回复:
数据溢出了,%d是 singed int,也就是有符号的,所以0xffffffff超出了他的数据范围,对于溢出处理,如果是无符号的,编译器会调整越界值使其满足要求(比如会对其进行可能取值数目求模);对于带符号类型,由编译器决定实际赋得值(大多数编译器的处理和无符号类型相似,但这依赖于编译器)
singed int 的范围 本来就是 [负数, 正数] 不是说符号位为1 就溢出了
lin5161678 2013-03-18
  • 打赏
  • 举报
回复
引用 6 楼 starytx 的回复:
数据溢出了,%d是 singed int,也就是有符号的,所以0xffffffff超出了他的数据范围,对于溢出处理,如果是无符号的,编译器会调整越界值使其满足要求(比如会对其进行可能取值数目求模);对于带符号类型,由编译器决定实际赋得值(大多数编译器的处理和无符号类型相似,但这依赖于编译器)
这里没有 有符号数溢出的问题 0xFFFFFFFF 是一个正常的 int
赵4老师 2013-03-18
  • 打赏
  • 举报
回复
对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行!
starytx 2013-03-15
  • 打赏
  • 举报
回复
数据溢出了,%d是 singed int,也就是有符号的,所以0xffffffff超出了他的数据范围,对于溢出处理,如果是无符号的,编译器会调整越界值使其满足要求(比如会对其进行可能取值数目求模);对于带符号类型,由编译器决定实际赋得值(大多数编译器的处理和无符号类型相似,但这依赖于编译器)
mymtom 2013-03-15
  • 打赏
  • 举报
回复
0xffffffff 本身不存在原码和补码的问题。 只能说 有符号32位整数-1的补码是0xffffffff, 或者说 有符号32位整数-4294967295的原码是0xffffffff 现在的计算机的一般都用补码表示整数。
haozi596 2013-03-15
  • 打赏
  • 举报
回复
原码表示原二进制码 补码 除符号位,按位取反+1 反码 除符号位,按位取反
熊玩意 2013-03-15
  • 打赏
  • 举报
回复
引用 1 楼 sha_jinhao 的回复:
printf("%d",0xffffffff); printf("%x",0xffffffff); -1 ffffffff请按任意键继续. . .
0xffffffff是原码还是补码?
haozi596 2013-03-15
  • 打赏
  • 举报
回复
假定 8位 1111 1111 原码 1000 0000 反码 除符号位,按位取反 = 0 1000 0001 补码 除符号位,按位取反+1 = -1 所以计算机使用的是补码
jimette 2013-03-15
  • 打赏
  • 举报
回复
printf("%d",0xffffffff); printf("%x",0xffffffff); -1 ffffffff请按任意键继续. . .

69,381

社区成员

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

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