整型赋值

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

请问:-1对256求模后的值为何是255?
...全文
118 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
回复
发动态
发帖子
新手乐园
创建于2007-09-28

3.2w+

社区成员

C/C++ 新手乐园
申请成为版主
社区公告
暂无公告