ページ 11

整数型について

Posted: 2017年10月11日(水) 17:36
by しき
以下のようなプログラムを組んだのですが実行時にSegmation faultと出ます。
何が原因なんでしょうか・・。よろしくお願いします。

コード:

#include<stdio.h>

int count_bits(unsigned x)
{
  int bits = 0;
  while(x){
    if(x & 1U) bits++;
    x >>= 1;
  }
  return bits;
}

int int_bits(void)
{
  return count_bits(~0U);
}
void print_bits(unsigned x)
{
  int i;
  for(i = int_bits() - 1; i >= 0; i--)
    putchar(((x >> i) & 1U) ? '1' : '0');
}


unsigned set(unsigned x,int pos)
{
  return(x|(1<<pos));
}

unsigned reset(unsigned x,int pos)
{
  return(x&(~(1<<pos)));
}

unsigned inverse(unsigned x,int pos)
{
  return(x^(1<<pos));
}

int main(void)
{
  unsigned no, x;
  printf("符号なし整数のxビット目を変更します。\n");
  printf("非負の整数を入力してください:");
  scanf("%u",&no);
  printf("何ビット目を変更しますか:");
  scanf("%u",x);
  printf("\nno      :");         print_bits(no);
  printf("\nset     :");         print_bits(set(no,x));
  printf("\nreset   :");        print_bits(reset(no,x));
  printf("\ninverse :");       print_bits(inverse(no,x));
  putchar('\n');
  return 0;
}

Re: 整数型について

Posted: 2017年10月11日(水) 20:00
by lunnear
unsignedという型はありません、unsignedは他の型と組み合わせて使います。
例えば unsigned int 等です。

Re: 整数型について

Posted: 2017年10月11日(水) 20:19
by lunnear
すいませんunsignedだけだとunsigned intに変換されるようですね。
あとは47行目の第二引数に実体が入っています。

Re: 整数型について

Posted: 2017年10月11日(水) 20:50
by しき
返信ありがとうございます。完全に凡ミスでした・・・。