通过移位把十进制转换成二进制的一个尝试

目的:将一个十进制数x转化成二进制数并打印出来。
主要思路:在我的机器上,一个short变量占据两个字节,连续的十六位,先定义一个short型变量i,然后将其分为两个八位的部分(s,(s+1)),用指针操作这两部分,给高地址的八位赋值为0,低地址的八位赋值为x,这样,要转换的数就以二进制形式储存在s所指向的八位里面。然后将i左移一位,那么x的二进制中的最高位将进入s+1的二进制最低位,此时,获取s+1指向的值。就得到了x的一个二进制位,然后s+1的指向清零,重复此操作即可获取全部位。
以下为代码:(也做了一个格雷码的转换,x八位大小,因为计算机以补码形式储存负数,所以负数将显示补码)

#include<stdio.h>
int xor(int ,int);
int main()
{
    int t=0;
    int tem;
    short i;                //i占据16位
    char *s=&i;             //s获取i的首地址,因为char类型,占八位
    int result[8];          //储存二进制结果
    int graycode[8];
    *(s+1)=0;               //高八位赋值0
    printf("--decimal:");
    scanf("%d",&tem);
    *s=tem;
    for(t=0;t<8;t++)
    {
        i=i<<1;             //通过移位获取一个一个值
        result[t]=(int)*(s+1);
        *(s+1)=0;           //重新赋值0
    }
    t=0;
    printf("bin  code:");
    for(t=0;t<8;t++)
        printf("%d",result[t]);
    graycode[0]=xor(0,result[0]);
    printf("\ngray code:%d",graycode[0]);
    for(t=1;t<8;t++)
    {
        graycode[t]=xor(result[t-1],result[t]);
        printf("%d",graycode[t]);
    }
    printf("\n");
    return 0;
}

int xor(int x,int y)
{
    if(x==y)
        return 0;
    else
        return 1;
}

至于变量的位在内存中的储存,是从高地址向低地址还是其他,暂时还在查阅资料,才能肯定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值