使用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©);
}
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;
}