C Primer Plus 第十五章——位操作

使用codeblocks下载时自带的gcc编译以下程序段(自己写的,跟书上不一样,但结果正确)时,debug和release的结果不一样(release结果正确,debug出现错误),debug模式下添加watch中num赋值后不知为何被置为0,调试时发现num在函数调用中出现not available in current context.

#include<stdio.h>
#define SIZE sizeof(int)*8+1
char *itobs(int n,char *str);
int invert_4bits(int num, int bits);
int main(void)
{
    int num=0;
    char strbin[SIZE];
    printf("Enter an integer:");
    while(scanf("%d",&num)==1)
    {
        while(getchar()!='\n');
        printf("%d\n",num);
        printf("%d is %s in binary.\n",num,itobs(num,strbin));
        printf("%d\n",num);
        printf("Inverting the last four bits gives %d. In binary: %s.\n",invert_4bits(num,4),itobs(invert_4bits(num,4),strbin));
        printf("Done!\n\n");
        printf("Enter an integer:");
    }
    return 0;
}
char *itobs(int n,char *str)
{
    int i;
    int copy;
    int mask=1;
    copy=n;
    for(i=SIZE-2;i>=0;i--,copy>>=1)
    {
        str[i]='0'+(mask&copy);
    }
    str[SIZE]='\0';
    return str;
}
int invert_4bits(int num, int bits)
{
    int mask=0;
    int bitval=1;

    {
        mask|=bitval;
        bitval<<=1;
    }
    return num^mask;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值