码迷,mamicode.com
首页 > 编程语言 > 详细

C语言实现原码补码输出

时间:2015-05-31 09:32:37      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:原码   补码   c   

今天复习了一下C中的原码补码的知识,顺便编程使用for , while, do-while,goto,recursive 实现了补码和原码的输出。


核心思想: 借助一个字符串数组,将得到的原码和补码存储到相应数组中去。在计算原码的时候,由于存在负数的补码等于原码取反+1的这么一个关系,因而只要计算一个在计算机内部存贮着的补码就可以了。而获取补码的方式很简单,只需要依次做位与操作,逐个取出即可。


ps: 这个版本的代码 可以很好的兼容 int short long等数据类型的输出

// ================【5种方式输出补码和原码】======================
// @ author         :       zhyh2010
// @ date           :       20150530
// @ version        :       1.1
// @ description    :       5 种方式 实现补码 和 原码的输出
//

#define DateType long
#define BitNum 32

void findNegCode_iter(DateType num, char * code, int bitNum, int cur_iter_num)
{
    if (cur_iter_num == bitNum)
        return;

    code[cur_iter_num] = (num & 1 << (BitNum - 1 - cur_iter_num)) == 0 ? ‘0‘ : ‘1‘;
    findNegCode_iter(num, code, bitNum, cur_iter_num + 1);
}

void findNegCode(DateType num, char * code, int bitNum)
{
    DateType inum = num;
//  =============【for】============
//  for (int i = 0; i != bitNum; i++)
//      code[i] = (inum & 1 << (BitNum - 1 - i)) == 0 ? ‘0‘ : ‘1‘;

//  =============【while】============
//  int i = 0;
//  while (i != bitNum)
//      code[i++] = (inum & 1 << (BitNum - 1 - i)) == 0 ? ‘0‘ : ‘1‘;

//  =============【do while】============
//  int i = 0;
//  do 
//  {
//      code[i++] = (inum & 1 << (BitNum - 1 - i)) == 0 ? ‘0‘ : ‘1‘;
//  } while (i != bitNum);

//  =============【goto】============
//  int i = 0;
// LOOP:
//  code[i++] = (inum & 1 << (BitNum - 1 - i)) == 0 ? ‘0‘ : ‘1‘;
//  if (i != bitNum)
//      goto LOOP;

    //  =============【recursive】============
    findNegCode_iter(num, code, bitNum, 0);
}

void findOriCode(DateType num, char * code, int bitNum)
{
    findNegCode(num, code, bitNum);

    if (num > 0)
        return;

    findNegCode(num * (-1), code, bitNum);
    code[0] = ‘1‘;
}

void main()
{
    for (DateType num = -5; num != 6; num++)
    {
        char OriCode[BitNum + 1] = { 0 };
        char NegCode[BitNum + 1] = { 0 };

        findOriCode(num, OriCode, BitNum);
        findNegCode(num, NegCode, BitNum);

        printf("num = %d\n\t原码:\t%s\n\t补码:\t%s\n", num, OriCode, NegCode);
    }

    return;
}

C语言实现原码补码输出

标签:原码   补码   c   

原文地址:http://blog.csdn.net/zhyh1435589631/article/details/46277769

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!