C中有关i++的问题

来源:互联网 发布:网络延长器多少钱 编辑:程序博客网 时间:2024/06/06 02:24
今天碰到了有关i++的一个奇怪的问题,和自己以前认为的完全不一样。代码如下
#include <stdio.h>#include <types.h>main(){unsigned char array[] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee};u_int8_t tmp0;u_int16_t tmp1;int i;i = 0;tmp1 = array[i++] | ((u_int16_t)array[i++] << 8);printf("tmp1 = %04x\n", tmp1);}

原本想着运行结果为"tmp1 = bbaa", 可实际的运行结果为"tmp1 = aaaa",这是为什么呢?运行环境为32bit ubuntu

要想得到"tmp1 = bbaa"的运行结果,需要对代码作如下修改

#include <stdio.h>#include <types.h>main(){unsigned char array[] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee};u_int8_t tmp0;u_int16_t tmp1;int i;i = 0;tmp0 = array[i++];tmp1 = (u_int16_t)(array[i++] << 8);tmp1 = tmp0 | tmp1;printf("tmp1 = %04x\n", tmp1);}

将array[]改为char型数组,对代码修改如下

#include <stdio.h>#include <types.h>main(){char array[] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee};u_int8_t tmp0;u_int16_t tmp1;int i;i = 0;//tmp0 = array[i++];//tmp1 = (u_int16_t)(array[i++] << 8);//tmp1 = tmp0 | tmp1;tmp1 = array[i++] | (((u_int16_t)array[i++]) << 8);printf("tmp1 = %04x\n", tmp1);}
运行结果为"tmp1 = ffaa", 这又是为什么呢?希望能得到大家的指点。


0 0
原创粉丝点击