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
- C中有关i++的问题
- 有关c中输入函数问题的解析
- C 语言中有关常见的运算符问题
- 有关C/C++中16进制的问题
- c 中有关宏定义的相关问题
- 有关C语言中输入语句的问题
- C语言中有关外部函数调用的问题
- C语言中有关二维数组的指针问题
- C中表达式语句以及副作用和++,--的有关问题
- c语言中 ++i 和 i++ 问题!
- C 中 i=i+i++之类问题。
- 关于java中i++,++i和i++ + ++i的问题
- c/c++ 中毫无意义的 i+++++i
- c语言中i++,++i的计算
- 有关const volatile int i = 100 的问题
- java中i=i++的问题
- java中i=i++的问题
- 一个有关皇后问题的程序(C#)
- 给大家推荐一个素材网站,包括图片,模板,特效等
- Python3.2官方文档翻译--异常抛出和自定义异常
- Webgl之three.js
- UIPageControl+UIScrollView的简单使用
- Hadoop实战-初级部分 之 MapReduce
- C中有关i++的问题
- javascript下的json 序列化及反序列化
- ZooKeeper运维之数据文件和事务日志
- ubuntu 14.04lts 安装Cisco Anyconnect Secure Mobility Client
- Scrapy入门
- Python异常处理总结
- uniDAC用法总结
- 知识回顾
- 安卓SharedPrefences详解以及记住密码的小例子