这4句C语言分析与结果?

unsigned data[3]={0xff,0x01,0x3f};
data[0]++;
data[1]++;
data{3}>>=1;
第一句漏错了,应该是unsigned char[3]={0xff,0x01,0x3f};

unsigned char data[3]={0xff,0x01,0x3f};
data[0]++; // data[0]=0xff=255, data[0]++即data[0]自身加1,由于data是char型的所以结果为0
// 二进制1111 1111加1的结果是1 0000 0000取低8位为0
data[1]++; // data[1]=0x01=1,自身加1等于2
data{3}>>=1; // data[3]写错了吧,我觉得应该是data[2],因为定义data[3]使用时下标最大值是2
// 如果是data[2]>>=1,即data[2]=data[2]>>1,即data[2]的数据右移1位或者整除2
// data[2]=0x3f=63,二进制0011 1111,右移1位0001 1111,即0x1f为十进制31
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-02
这个应该是这样的吧
unsigned data[3]={0xff,0x01,0x3f};
data[0]++;
data[1]++;
data[2]>>=1;
cout<<data[0]<<" "<<data[1]<<" "<<data[2]<<endl;
输出的结果为 256 2 31
0xff 是16进制的数 转换成十进制是 255
0x01 同理 是 1;
0x3f 值为 63 对应的 二进制为: 0011 1111
因此 data[0]++ 就是 255 +1 = 256 data[1]++ 为 1 + 1 = 2
data[2] >>=1 为 data[2] = data[2] >>1 就是 移位 右移一位 0011 1111 右移一位为0001 1111
对用的 十进制数为 31。
第2个回答  2013-02-02
你这是什么类型?
相似回答