崔铭1315 发表于 2020-8-1 23:37:34

赋值号左边无符号整型,右边有符号整型,进行a=-1赋值,为什么等于65535?

当赋值号左边的变量为无符号整型,右边的值为有符号整型时,则把内存中的内容原样复制。右边的数值的范围不应超出左边变量可以接受的数值范围。同时需要注意,这时负数将转换为正数。例如,变量a被说明为unsigned类型,在进行了a=-1的赋值操作后,将使a中的值为65535.




我的理解
负整数在内存中是以“补码”形式存放的。

-1原码1000000000000001
   反码1111111111111110
   补码1111111111111111
-1有符号整型补码转化为无符号整型为65535.(应该算对了)


不理解
为什么是16位二字节1000 0000 0000 0001,而不是32位四字节 1000 0000 0000 0000 0000 0000 0000 0001{:5_99:} {:5_94:} 这种?(脑子转不上来)
整型不是还有四字节的吗{:5_90:}

永恒的蓝色梦想 发表于 2020-8-1 23:53:34

这里只是拿 2字节 的整形举例……

崔铭1315 发表于 2020-8-1 23:55:53

永恒的蓝色梦想 发表于 2020-8-1 23:53
这里只是拿 2字节 的整形举例……

他哪里说两个字节的整型举例了{:5_105:}

崔铭1315 发表于 2020-8-1 23:59:05

永恒的蓝色梦想 发表于 2020-8-1 23:53
这里只是拿 2字节 的整形举例……

知道了{:5_109:},我这本书上unsigned类型有四字节的

永恒的蓝色梦想 发表于 2020-8-2 00:00:48

崔铭1315 发表于 2020-8-1 23:55
他哪里说两个字节的整型举例了

一共 16 位不是 2 字节么……

崔铭1315 发表于 2020-8-2 00:24:47

永恒的蓝色梦想 发表于 2020-8-2 00:00
一共 16 位不是 2 字节么……

老师,你从哪几个字知道16位的,我咋没看到啊{:10_266:}{:10_266:},我看书本,他没说16位啊,这个类型也有四字节的呀,我眼瞎{:10_299:},脑子不好使。是unsigned吗

永恒的蓝色梦想 发表于 2020-8-2 00:33:11

崔铭1315 发表于 2020-8-2 00:24
老师,你从哪几个字知道16位的,我咋没看到啊,我看书本,他没说16位啊,这个类型也 ...

1000000000000001
你自己数一数是多少位……
页: [1]
查看完整版本: 赋值号左边无符号整型,右边有符号整型,进行a=-1赋值,为什么等于65535?