整型赋值

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

请问:-1对256求模后的值为何是255?
...全文
151 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
andy1658 2011-09-29
5楼介绍的文章很不错啊,顶一下
  • 打赏
  • 举报
回复
哦,原来是这样
  • 打赏
  • 举报
回复
_了凡_ 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
  • 打赏
  • 举报
回复
相关推荐
发帖
新手乐园

3.3w+

社区成员

C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
帖子事件
创建了帖子
2011-09-27 11:31
社区公告
暂无公告