您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何在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 b, unsigned c);//函數聲明 unsigned a,b,c; printf("Input unsigned integer numbers a, b, c:\n"); scanf("%u%u%u",&a,&b,&c);//輸入 printf("%u*%u%%%u=%u\n",a,b,c,mod(a,b,c));//輸出 } unsigned mod(unsigned a, unsigned b, 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語言中實現位運算就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。