long 与int 比较,在32位机器,sizeof都是 占用4个字节;

在window 64位也是占用4个字节

但是在Linux 64位,long占用 8个字节, int占用4个字节,这样比较就会有问题。 当int 强转 位long时,发生 int高位1(符号位1)转为long的高位1(补全) 出现大的值。

譬如:     int 0x80650008 (-2140864504) 高位1,是一个负值,

    强转位long 0xFFFFFFFF80650008 (-2140864504) , 这样就出现问题了。

下面这段代码TTSAPIERROR 实际上是32位,那么只需要比较32位即可,可以将long 强转为int

#include "stdio.h"

#ifndef SCODE
#define SCODE long
#endif #ifndef MAKE_SCODE
#define MAKE_SCODE(sev,fac,code) \
((SCODE) (((unsigned long)(sev)<<) | ((unsigned long)(fac)<<) | ((unsigned long)(code))) )
#endif #define FACILITY_TTSAPI (0x65)
#define SEVERITY_ERROR 1
#define TTSAPIERROR(x) MAKE_SCODE(SEVERITY_ERROR, FACILITY_TTSAPI, (x & 0x0000FFFF)) int main()
{ //error code
int ret = TTSAPIERROR(0x08);
long ret2 = (long)ret; if(ret2 == TTSAPIERROR(0x08))
{
printf("find error, 0x08 \n");
} //show
printf("%d %ld ,%ld \n", ret, ret2, TTSAPIERROR(0x08)); printf("--ul:%d l:%d \n",sizeof(unsigned long), sizeof(long));
return ;
}

运行:

[root@localhost:/data/lkchu]# gcc -m64 test.c
[root@localhost:/data/lkchu]# ./a.out
- - ,
--ul: l:
[root@localhost:/data/lkchu]# gcc -m32 test.c
[root@localhost:/data/lkchu]# ./a.out
find error, 0x08
- - ,-
--ul: l:

将代码修改为

int main()
{ //error code
int ret = TTSAPIERROR(0x08);
long ret2 = (long)ret; if(ret == (int)TTSAPIERROR(0x08))
{
printf("find error, 0x08 \n");
} //show
printf("%d %ld ,%ld \n", ret, ret2, TTSAPIERROR(0x08)); printf("--ul:%d l:%d \n",sizeof(unsigned long), sizeof(long));
return ;
}

long 与int 比较问题的更多相关文章

  1. 【NX二次开发】NX内部函数,libufunx.dll文件中的内部函数

    本文分为两部分:"带参数的函数"和 "带修饰的函数". 浏览这篇博客前请先阅读: [NX二次开发]NX内部函数,查找内部函数的方法 带参数的函数: void e ...

  2. 在将 varchar 值 'xinpian' 转换成数据类型 int 时失败?

    把int类型的值修改为varchar类型的值

  3. 把int*传值给char*,打印出错误的数字

    首先进入debug模式查看i的地址也就是ptr的值 以16进制位小端模式存储(一个整型四个字节,8位16进制数)(根据系统位数情况) 紧接着因为ptr是char*型指针变量,读取数据时按照一个字节一个 ...

  4. Convert.ToInt32()、int.Parse()和(int)三者的区别

    Convert.ToInt32将object类类型转换成int类型,如Convert.ToInt32(session["shuzi"]); (int)适合简单数据类型之间的转换: ...

  5. Android View.setId(int id) 用法

    Android View.setId(int id) 用法 当要在代码中动态的添加View并且为其设置id时,如果直接用一个int值时,Studio会警告. 经过查询,动态设置id的方法有两种; 1. ...

  6. 用枚举enum替代int常量

    枚举的好处: 1. 类型安全性 2.使用方便性 public class EnumDemo { enum Color{ RED(3),BLUE(5),BLACK(8),YELLOW(13),GREEN ...

  7. 深度解析C语言int与unsigned int

    就如同int a:一样,int 也能被其它的修饰符修饰.除void类型外,基本数据类型之前都可以加各种类型修饰符,类型修饰符有如下四种:1.signed----有符号,可修饰char.int.Int是 ...

  8. Navicat软件中mysql中int、bigint、smallint和tinyint的区别、布尔类型存储以及乱码问题的解决

    很长时间不写博客了,最近一直在忙这学校的比赛都忘记更新博客了.新的任务又要开始了,我们要准备<2017年中国大学生计算机设计大赛软件服务外包竞赛>.这次不能再想像之前那样有PC端的功能作为 ...

  9. Android LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)的参数理解

    方法inflate(int resource, ViewGroup root, boolean attachToRoot) 中 第一个参数传入布局的资源ID,生成fragment视图,第二个参数是视图 ...

  10. 使用Guid做主键和int做主键性能比较

    使用Guid做主键和int做主键性能比较 在数据库的设计中我们常常用Guid或int来做主键,根据所学的知识一直感觉int做主键效率要高,但没有做仔细的测试无法 说明道理.碰巧今天在数据库的优化过程中 ...

随机推荐

  1. mybatis插入返回主键

     useGeneratedKeys="true" keyProperty="id" <insert id="insertReturnPrimar ...

  2. 「FJ2014集训 采药人的路径」

    题目 考虑一下把\(0\)看成\(-1\),那么就是找到一条边权和为\(0\)的路径,且这条路径可以被分成两段,边权和都是\(0\) 没有第二个限制就是点分裸题了 其实有了第二个限制还是点分裸题 考虑 ...

  3. 开源项目之防火墙 tdifw

    tdifw是windows防火墙软件(TDI层驱动过滤),负责监控网络监听与连接.以及过滤信息. 源码在src目录, 程序在Bin目录,执行根目录下的批处理文件也可以,具体步骤如下: 1. 运行ins ...

  4. 从零一起学Spring Boot之LayIM项目长成记(一) 初见 Spring Boot

    项目背景 之前写过LayIM的.NET版后端实现,后来又写过一版Java的.当时用的是servlet,websocket和jdbc.虽然时间过去很久了,但是仍有些同学在关注.偶然间我听说了Spring ...

  5. AAAI 2016 paper阅读

    本篇文章调研一些感兴趣的AAAI 2016 papers.科研要多读paper!!! Learning to Generate Posters of Scientific Papers,Yuting ...

  6. 学习openGL-windows环境配置

    windows对openGL的支持直到1.1,而如今openGL版本已经更新到4.5,为了使用高版本的API,需要安装拓展库(glew). openGL只是个渲染系统,但是它不能产生窗口,需要依赖其它 ...

  7. php面试重要知识点,面试题

    1.什么是引用变量,用什么符号定义引用变量? 概念:用不同的名称引用同一个变量的内容:用&符号定义. 例如: $a = range(0,100); $b = &$a; $b = ran ...

  8. angularjs ng-app="angular_app" ng-controller="angular_controller" ng-init="findAll()"

    ng-app="angular_app" 范围 ng-controller="angular_controller" 控制器 ng-init="fin ...

  9. 【2017年最新】 iOS面试题及答案

    设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事情. 1). MVC模式:Model View Control,把模型 视图 控制器 ...

  10. 『C++』Temp_2018_12_26_02

    #include <iostream> #include <string> #include <stdio.h> #include <stdlib.h> ...