一个简单的数值比较问题
2007-04-11 09:35
375 查看
#include <stdio.h>
int main(void)
{
int i = 0xaabbccdd;
char *p = (char *)&i;
if (p[0] == 0xdd)
printf("equal ");
else
printf("not equal ");
return 0;
}
程序的本意是当在little-endian的机器(Intel)上运行时,输出equal,然而运行后却输出"not equal“,与预想的想法。
问题出在何处?出在未正确C中的类型提升规则。
在if (p[0] == 0xdd) 这条语句中,运算符“==”的右操作数为整数常量,类型默认为int;左操作数为char型,因此需要进行由char至int的类型提升,由于p[0]的值为0Xdd(符号位为1),根据数据宽度扩展时符号位的扩展规则,p[0]会被扩展为(int)0XFFFFFFDD,自然与(int)0XDD不相等,因此输出"not equal"。
相关文章推荐
- 如何交换a,b的数值——一个简单的问题就证明现在的你依然弱爆了
- 一个比较简单的c-free问题
- [睡前灵感and发散思维]由一个简单的数组比较问题而想到的
- 《解决问题1000.1》又是I2C驱动问题,产品应用上一个问题,非常简单,也比较典型,记录一下
- [VB.NET]请教一个比较简单的问题
- 由三目运算符 == ? : 引起的一个问题,醉了,基础不过关。记录一下,比较简单的一个问题,只是为了记录一下
- 时间比较问题 举一个简单例子说明:比如一个论坛对当天发表的贴子用new图片标记一下
- 问大佬们一个比较简单的问题
- 一个简单登陆框的变化+更新了如何连接sql数据库,获得数据集,比较两种方法(数据集和读数据)
- MYSQL一个简单的问题 error: Failed dependencies: MySQL-server conflicts with mysql-server
- 将一个十六进制“字符串”转换为十进制数值的问题
- 一个简单而美好的曲线-不同收益率下的长期收益比较
- 突出一个简单粗暴!Android Activity泄漏问题解决方案
- 一个简单的背包问题
- 一个简单比较oracle两个用户下表数据差异的python脚本
- 一个简单的字符数组比较
- ~~把我搞晕了!一个简单的C#语法问题
- 一个困惑了我一个下午的简单的问题
- 将一个十六进制字符串转换为十进制数值的问题
- 水杯问题(就是一个简单的广搜)