整型赋值

delectation 2011-09-27 11:31:10
c++ primer(第四版,特别版)P32,有这样一段话:
c++中,把负值赋给unsigned对象完全合法的,其结果是该负数对该类型的取值个数求模后的值。所以,如果把-1赋给8位的unsigned char,那么结果是255,因为255是-1对256求模后的值。

请问:-1对256求模后的值为何是255?
...全文
200 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy1658 2011-09-29
  • 打赏
  • 举报
回复
5楼介绍的文章很不错啊,顶一下
一蚊惊人小号 2011-09-28
  • 打赏
  • 举报
回复
哦,原来是这样
_了凡_ 2011-09-28
  • 打赏
  • 举报
回复
1楼6楼殊途同归啊。
pathuang68 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 delectation 的回复:]
c++ primer(第四版,特别版)P32,有这样一段话:
c++中,把负值赋给unsigned对象完全合法的,其结果是该负数对该类型的取值个数求模后的值。所以,如果把-1赋给8位的unsigned char,那么结果是255,因为255是-1对256求模后的值。

请问:-1对256求模后的值为何是255?
[/Quote]

x % 256 = 255,那么可以有x = k * 256 + 255, 且k须为整数。若k = -1, 那么x = -1,所以说“255是-1对256求模后的值”
5t4rk 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jake443403168 的回复:]

32位机为例
由于数据是用补码存储
有符号的-1在内存中是1111 1111 1111 1111 1111 1111 1111 1111

赋值给 unsigned char 截取得到1111 1111
由于是 unsigned 最高位编译器不再认为是符号位,所以是个正数了。 还原为原码得到的就是255
[/Quote]
就是这么回事

楼主看看这个吧 就明白了
http://blog.163.com/shi_shun/blog/static/237078492010651063936/
我喝多了 2011-09-28
  • 打赏
  • 举报
回复
内存中负数是用补码表示的,稍微看一下补码吧
seucs 2011-09-27
  • 打赏
  • 举报
回复
简单的说就是将起表示成2进制位以后对超出的高位作截断处理
Jake443403168 2011-09-27
  • 打赏
  • 举报
回复
32位机为例
由于数据是用补码存储
有符号的-1在内存中是1111 1111 1111 1111 1111 1111 1111 1111

赋值给 unsigned char 截取得到1111 1111
由于是 unsigned 最高位编译器不再认为是符号位,所以是个正数了。 还原为原码得到的就是255

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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