1. 程式人生 > 程式設計 >關於C語言位運算的簡單示例

關於C語言位運算的簡單示例

位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。C語言提供了6個位操作運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。

1.輸入一個float型數,以十六進位制形式輸出其32位機器數。

#include<stdio.h>
void main()
{
 float a;
 int *p;
 printf("Input a float number:\n");
 scanf("%f",&a);
 p=(int *)&a;
 printf("%X",*p);
}

2.從鍵盤輸入一個二進位制非負整數,螢幕上列印輸出對應的十進位制、八進位制和十六進位制數,要求輸出的十六進位制數中的英文字母為大寫字母。

#include<stdio.h>
void main()
{
 int ConvertBinaryToDecimal(long long n);//二進位制轉十進位制的函式宣告
 long long n;
 printf("Input a binary number:\n");
 scanf("%lld",&n);//從鍵盤讀取一個二進位制數
 long long m;
 m=ConvertBinaryToDecimal(n);//呼叫函式
 printf("The number is %d in decimal.\n",m);//輸出十進位制數
 printf("The number is %o in octal.\n",m);//輸出八進位制數
 printf("The number is %X in hexadecimal.\n",m);//輸出十六進位制數
}

int ConvertBinaryToDecimal(long long n)
{
 int i=1,j,sum=0;//i表示位權,j表示每一次迴圈取出的尾數,sum表示轉換的十進位制數
 while(n!=0)
 {//迴圈條件為n不等於0
 j=n%10;
 sum+=j*i;
 n/=10;
 i*=2;
 }
 return sum;
}

3.定義函式void DecToBin(int a,char b[33]); 函式功能是將整數a轉換為它對應的32位二進位制機器數,將32位二進位制機器數以字串形式存於字元陣列b(以'\0'字元結束)不允許使用%2運算,只能利用位運算子(如:移位運算,與運算等)實現程式功能。

#include<stdio.h>
void main()
{
 void DecToBin(int a,char b[33]);//函式宣告
 int n,i=0;char b[33];
 scanf("%d",&n);//從鍵盤讀取一個數
 DecToBin(n,b);//函式呼叫
}

void DecToBin(int a,char b[33])
{
 int i;
 if(a>=0)//當a大於零時,直接通過位運算求其32位2進位制機器數
 {
 for(i=0;i<32;i++)b[i]=0;
 b[32]='\0';
 i=0;
 while(a!=0)
 {
  b[i++]=a&1;
  a=a>>1;
 }
 }
 else//當a小於零時,先求其絕對值的機器數,再每位取反,再最後一位加1 
 {
 for(i=0;i<32;i++)b[i]=1;
 b[32]='\0';
 a=-a;
 i=0;
 while(a!=0)
 {//每位取反
  if((a&1)==0)
  b[i++]=1;
  else
  b[i++]=0;
  a=a>>1;
 }
 b[0]+=1;//最後一位加1
 i=0;
 while(b[i]==2)//判斷是否需要進位
 {
  b[i]=0;
  b[++i]+=1;
 }
 }
 for(i=31;i>=0;i--)
 printf("%d",b[i]);//輸出
 printf("\n");
}

4.定義函式unsigned mod(unsigned a,unsigned b,unsigned c); 功能是計算並返回a*b%c的結果。要求考試a,b,c的範圍是大於0且小於 231,程式不能使用64位整型(如:long long型別或__int64)求解。

#include<stdio.h>
void main()
{
 unsigned mod(unsigned a,unsigned c);//函式宣告
 unsigned a,c;
 printf("Input unsigned integer numbers a,c:\n");
 scanf("%u%u%u",&a,&b,&c);//輸入
 printf("%u*%u%%%u=%u\n",a,c,mod(a,c));//輸出
}
unsigned mod(unsigned a,unsigned c)
{
 int i;
 int bin[32]={0};
 i=0;
 while(b!=0)
 {//求b的32為二進位制數存入陣列bin中
 bin[i++]=b&1;
 b=b>>1;
 }
 unsigned result=a*bin[31];//初始化result的值
 for(i=31;i>0;i--)
 result=(result<<1)%c+a*bin[i-1];//迭代法求result的值
 result=result%c;
 return result;//返回result
}

到此這篇關於關於C語言位運算的簡單示例的文章就介紹到這了,更多相關C語言位運算內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!