鸡啄米
值得你研究的:有符号数和无符号数的强制类型转换›评论
-
5. tsukikage:
感觉符号数其实挺无辜的。
首先明明是-1,非被看成0xff来用。
还被做了一个有溢出的左移运算。
结果结论就是符号数转换,不安全。。。
如果左移不溢出,结果不会有问题的吧。。
而且,抛除溢出部分,对于char类型来说,无论是有符号,还是无符号来说,结果都是0xff吧。
注,假定编译器char为signed int2016/2/19 15:22
-
4. 菜鸟来袭:
感觉这只是针对MS VC++编译器来说的2014/6/23 10:42
-
3. yueyixing11:
第一:char不一定是有符号,标准规定这是编译器相关的,所以第一个的例子最好加上signed.第二:给signed char赋值0xFF,是有问题的,标准规定unsigned类型的溢出是取模,对于signed类型的溢出是未定义的,所以这个在不同的编译器上可能会出现不同的值。对于楼主所用的编译器来说是是直接把0xFF赋给了ch[6],然后因为是带符号的,所以把0xFF按照负数的补码来解释,就是-1.
第三:只是分析了编译器的实现,没有说为什么会这样操作。
其实,这里涉及了整型提升和符号扩展两个问题。抛开编译器的实现细节,对于第一个例子来说,signed char类型的ch[7]先被提升为int,然后乘以256,最后加上上面得出的-1(此时也会被提升为整型,signed char的-1变为int类型的-1,你看一下他们的补码就知道为什么必须进行符号扩展了),所以0xF*128+(-1)=3839即0xEFF。yueyixing11 于 2014-5-21 17:00:15 回复更正一下,最后应该是0xF*256+(-1)=3839即0xEFF
2014/5/21 16:57
-
2. 合肥做网站公司:
比较深奥,看不懂啊!2013/3/10 18:46
-
1. 入门啦:
沙发我来了。2013/3/9 19:26
发表评论