0xcfffffff3<<2; 我的结果为ffffffcc
请问i的类型不是被提升为unsigned int 型了吗?
这个问题我不解释了。回去重看。
敬服 这数字真实太奇妙了 第一个转型为unsigned int
int i = 0xcffffff3; 因为这个变量是个有符号数,所以在做右移运算时候要考虑正负。 '如果是负数,那么高位移入1还是0不一定,这是Implementation-defined的。对于x86平台的gcc编译器,最高位移入1,也就是仍保持负数的符号位,这种处理方式对负数仍然保持了“右移1位相当于除以2”的性质。' 所以在x86平台上就是高位移入1了。
0xcffffff3是unsigned int,正数直接打印补0,所以第一个结果是0x33fffffc; 但i是int,int i = 0xcffffff3属于Implementation-defined。所以第二个结果因平台而异。
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!