在学习c的位运算,有点作用的几个函数。


union int_per_byte_u{unsigned int value;unsigned char bs[4];
};void print_per_byte(in int a)
{union int_per_byte_u b;int i;b.value = a;for( i=0; i<4; ++i ){printf("%d  ", b.bs[i]);}printf("\n");
}int is_small_endian()
{short i = 0x0001;return ((char *)&i)[0];//[0] is low byte, [1] is high byte.
}int is_big_endian()
{union int_per_byte_u b;b.value = 1;if( b.bs[0] )return(0);return(1);//[0] is low byte, [1] is high byte.
}void print_binary_xx(in const char *a,in int bytes)
{const char *pos = a;int i,j;if( is_small_endian() ){for(i=bytes-1; i>=0; --i){for(j=7; j>=0; --j){printf("%d",( pos[i]&(1<<j)?1:0 ));}printf(" ");}}printf("\n");
}double absolute(in double x)
{double tmp = x;*(((int *)&tmp)+1)&=0x7fffffff;return tmp;//0&1=0//to the high byte,highest zero is postive.
}int align_down(in int a,in int size)
{return (a&~(size-1));
}int align_up(in int a,in int size)
{//-b = ~(b-1);return ((a+size-1)&~(size-1));
}
</pre><p><pre name="code" class="cpp">int main()
{printf("lesson_1 hacker's book. size int %d \n", sizeof(int));printf("big endian:%d, small endian:%d \n",is_big_endian(), is_small_endian());printf("sizeof void",sizeof(void));//two ff is a byteint a=0x010204ff;print_binary_xx( (char *)&a, 4);//absolutedouble n = -1.2;print_binary_xx( (char *)&n, 8 );double abs = absolute( n );print_binary_xx( (char *)&abs, 8 );//up-down-alignint down = align_down( 63, 16);int up = align_up( 63, 16 );printf("down align:%d, up align:%d \n",down, up);return 0;
}

判别机器大小端,打印int的二进制相关推荐

  1. 经典笔试题:用C写一个函数测试当前机器大小端模式

    "用C语言写一个函数测试当前机器的大小端模式"是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 1 #include <stdio.h&g ...

  2. Java打印int类型二进制

    在java中,int类型是4个字节,一共32位. java中int有正负,所以int类型表示范围位是 -(2^(31))到 2^(31)-1 如何打印一个int类型的变量的二进制? 因为有32位置,所 ...

  3. 测试机器大小端的方法

    首先,给出一些大小端相关概念. 大小端的由来: 在乔纳森·斯威夫特的著名讽刺小说<格列夫游记>中,小人国内部分裂成Big-endian和Little-endian两派,区别在于一派要求从鸡 ...

  4. linux中判断平台是大端或小端的方法,判断机器大小端的方法

    以前就简单据说过电脑的大小端之分,还有经过程序来判断你的电脑是大端仍是小端.今天在学习网络的时候又接触了大小端,这里就再给你们详细的介绍一下电脑的大小端.node 首先,介绍一下什么是大端什么是小端. ...

  5. 什么是大小端?如何测试某台机器是大端还是小端。

    大小端是指数据在内存中的保存方式. 顾名思义 大小端 就是大端和小端. 大端模式: 所谓的大端模式,是指数据的高字节,保存在内存的低地址中,数据的低字节,保存在内存的高地址中. 低地址存在高位,高地址 ...

  6. 彻底弄懂什么是大小端

    目录 一.什么是大小端? 二.举列: 三.为什么有大小端模式之分呢? 四.经典笔试题:用C语言代码测试机器大小端 一.什么是大小端? 表示数据在存储器中的存放顺序 小端模式:数据的高字节,存放在高地址 ...

  7. C++ int float double类型的数据大小端转化

    以下代码抄自<网络多人游戏架构与编程>,可以支持float.int.double等数据类型数据的大小端转换,测试代码为: void TestByteSwap() {int32_t test ...

  8. 计算机存储的大小端模式解析

    ---------------------------------------------------------------------------------------------------- ...

  9. C语言基础09——数据在内存中的存储。整型的存储、大小端讲解、浮点数的存储、杨辉三角、找凶手、猜名次

    目录 数据类型 基本内置类型 类型的基本分类 整型在内存中的存储 计算机中整数的三种表示方法:原码.反码.补码 大小端 练习 浮点型在内存中的存储 为什么以下程序输出结果与想象不同? 浮点数存储规则 ...

  10. 大小端、字节顺序转换函数和IP地址格式转换函数

    大小端.字节顺序转换函数和IP地址格式转换函数 大小端 CPU大小端之分 常见字节序 字节顺序转换函数 Linux系统下定义 Windows系统下 ntohs() htons() htonl()和nt ...

最新文章

  1. Windows phone 7新开发工具发布
  2. SAP事务码MM17物料主数据批量维护
  3. JAVA 泛型中的通配符 T,E,K,V,?
  4. ssm整合之四 分页
  5. Python项目实战:爬取斗图网表情包图片
  6. mybatis #与$区别
  7. 脚本录制软件python 按键精灵 tc_GitHub - yang-dongxu/KeymouseGo: 类似按键精灵的鼠标键盘录制和自动化操作...
  8. matlab 格式化文件,Matlab 文件格式化/Matlab Source File Formator
  9. 【5年Android从零复盘系列之二十八】Android存储(3):assets文件详解
  10. 适合普通人的基金投资研究工具之:且慢与基金组合
  11. 继承 方法重写 组合(尚学堂视频学习总结_003)
  12. python 统计英语文档词汇出现频率,以六级真题为例
  13. 普普通通的算法期末考试试卷
  14. Datagrid striped 不工作?
  15. 程序员更容易生女孩子,是不是真的?
  16. 开水果店的一些拿货小建议,水果店第一次如何拿货
  17. 人的一生七八十年,到底该如何度过?
  18. 用网络摄像头做延时摄影(WPF+Emgu.CV)
  19. 宁高宁:五个环节让你看懂中国企业
  20. 360浏览器等被金山毒霸网强制霸占问题解决

热门文章

  1. matlab mtf,MtF - MATLAB Central
  2. 使用Dumuz淘宝订单批量插旗备注
  3. 全息投影是计算机技术吗,3D全息投影技术怎么应用在展厅的?
  4. 阿里面试题 ——输入一个字符串,输出所有的排列
  5. uniapp 苹果安全区配置
  6. 基于SSM的医院科室人员管理系统
  7. linux运行igv报错,IGV 哐当就不能用了,除了换台电脑还能怎么办?
  8. GitHub 用户专属福利,实际到账 3K+,Namebase Airdrop
  9. Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training(贪心+二分)
  10. Android工具 - 随机测试(猴子)