A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 寇亮 于 2014-8-12 23:58 编辑

最近在自学C,总结了一些内容跟大家分享,希望能共同进步。
一、输出整数的二进制位

  1. void printBinary(int number)
  2. {
  3.         int temp = (sizeof(number) << 3) – 1;
  4.         while(temp >= 0)
  5.         {
  6.                 int value = number>> temp & 1;
  7.                 printf(“%d”, value);
  8.                 temp--;
  9.         }
  10. }
复制代码


点评

这个是死循环。。。temp的值没有改变  发表于 2014-8-8 01:39

9 个回复

倒序浏览
本帖最后由 寇亮 于 2014-8-12 23:59 编辑

二、输出基本数据类型的16进制位表示:

  1. #include<stdio.h>
  2. typedef unsigned char *byte_pointer;
  3. void show_bytes(byte_pointer start,int len)
  4. {
  5.     int i;
  6.     for(i=0;i<len;i++)
  7.         printf("%.2x ",start);
  8.     printf("\n");
  9. }
  10. void show_int(int x)
  11. {
  12.     show_bytes((byte_pointer)&x,sizeof(int));
  13. }
  14. void show_short(short x)
  15. {
  16.     show_bytes((byte_pointer)&x,sizeof(short));
  17. }
  18. void show_float(float x)
  19. {
  20.     show_bytes((byte_pointer)&x,sizeof(float));
  21. }
  22. void show_pointer(void *x)
  23. {
  24.     show_bytes((byte_pointer)&x,sizeof(void *));
  25. }
复制代码



点评

CSAPP上的代码。不过这个输出的不是二进制位,而是单个字节的16进制表示  发表于 2014-8-8 01:35
回复 使用道具 举报
本帖最后由 寇亮 于 2014-8-7 22:14 编辑

第二种方法更加简便实用,而且没有多余的运算。能真实的反映出变量在内存中的存储属性。
回复 使用道具 举报
本帖最后由 寇亮 于 2014-8-8 09:10 编辑

少写了一句,现已补全。谢谢提醒
回复 使用道具 举报
加个好友一起学C吧  
回复 使用道具 举报
天真 发表于 2014-8-8 10:02
加个好友一起学C吧

怎么加好友?不太懂论坛操作呢
回复 使用道具 举报
好办法 不过  这个 貌似 还有其他做法
回复 使用道具 举报
你刚学,技术分怎么这么高
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马