int j = i>>31; // int型变量可以做移位运算 printf("j= %d \n", j); // -1,由此判定右移时还是算术右移 } 分析过程: 上述程序输出j = -1,则推断为算术右移。 1)i = 0x80028002的二进制表示1000 0000 0000 0010 1000 0000 0000 0010; 2)由于最高符号位为1,i右移31位,i的二进制表示1111...
1.位运算符不改变原变量的值,即无副作用; 2.进行取反运算~时,编译器会将char型转换为int型进行计算(VC6.0,其他编译器未测试),这时要特别注意,一般int型字节数比char型多,转换后高位为0,取反后为1,若后续有右移运算,则会将这些1移入,影响计算结果。 如 unsigned char a = 0xA5; unsigned char b = ~...
在左移右移中,如果数据类型总位数小于int,则先转化为int再进行移位运算。如果左移或右移位数大于数据类型位数,则先进行对数据类型位数取模,再用余数进行移位运算。 1#include <stdio.h>2intmain()3{4chara =0x11;5//for(i = 0;i < 100;i++)6//{7//printf("%d\n", a>>i);8//}9printf("%d...
int j = i>>31; // int型变量可以做移位运算 printf("j= %d \n", j); // -1,由此判定右移时还是算术右移 } 分析过程: 上述程序输出j = -1,则推断为算术右移。 1)i = 0x80028002的二进制表示1000 0000 0000 0010 1000 0000 0000 0010; 2)由于最高符号位为1,i右移31位,i的二进制表示1111...