C語言丨關於位運算的使用,只需掌握這4個簡單示例!

2021-01-08 騰訊網

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

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

#include

void main()

{

float a;

int *p;

printf("Input a float number:\n");

scanf("%f",&a);

p=(int *)&a;

printf("%X",*p);

}

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

#include

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

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

b[32]='\0';

i=0;

while(a!=0)

{

b[i++]=a&1;

a=a>>1;

}

}

else//當a小於零時,先求其絕對值的機器數,再每位取反,再最後一位加1

{

for(i=0;i

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

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]=;

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

result=result%c;

return result;//返回result

}

以上就是關於對關於C語言位運算的簡單示例的詳細介紹。歡迎大家對關於C語言位運算的簡單示例內容提出寶貴意見。

相關焦點

  • 深入理解C語言
    導讀:Dennis Ritchie過世了,他發明了C語言,一個影響深遠並徹底改變世界的計算機語言。一門經歷40多年的到今天還長盛不訓的語言,今天很多語言都受到C的影響,C++,Java,C#,Perl,PHP,Javascript等等。但是,你對C了解嗎?相信你看過本站的《C語言的謎題》還有《誰說C語言很簡單?》。
  • 494,位運算解只出現一次的數字
    你可以不使用額外空間來實現嗎?示例 1:示例 2:這題說的是只有一個數出現了一次,其他數字都出現了2次,讓我們求這個只出現一次的數字。這題使用位運算是最容易解決的,關於位運算有下面幾個規律1^1=0;1^0=1;0^1=1;0^0=0;也就說0和1異或的時候相同的異或結果為0,不同的異或結果為1,根據上面的規律我們得到a^a=0;自己和自己
  • Java二進位和位運算,這一萬字準能餵飽你
    小貼士:一般來說,程序讓人看懂遠比被機器看懂來得更重要些位運算它在low-level的語言裡使用得比較多,但是對於Java這種高級語言它就很少被提及了。雖然我們使用得很少但Java也是支持的,畢竟很多時候使用位運算才是最佳實踐。位運算在日常開發中使用得較少,但是巧妙的使用位運算可以大量減少運行開銷,優化算法。
  • 「C語言從入門到入土」必備C語言基礎筆記整理
    一、C語言1、什麼是C語言?C語言是人寫機器看的一種語言。C語言是高級語言中的低級語言。C語言貼近硬體。C語言的入門學習比較簡單。表示問號)printf("輸出三個數 :\n%d\n%d\n%d\n",a,b,c); //變量要先定義,後使用。 在這裡使用換行時應注意 寫成格式 「%d\n」//三個數則要書寫三次。它們相連之間不用分號,也不用逗號。
  • C語言陷阱與技巧第13節,1位元組(Byte)一定等於8位(bit)嗎?C語言操作...
    但是C語言的這些「低級」也是 C語言的優點——使用C語言開發程序,程式設計師能夠準確知道究竟使用了多少資源,以及哪些資源還在內存裡,哪些已經被釋放。換句話說,C語言程序具備資源的使用確定性。因此,C語言特別適合用於一些資源比較匱乏的項目開發中。
  • C語言怎麼樣?今天聊聊C語言的發展史!
    至於這裡的N是多少,這取決於你的目標語言(這裡是C語言)的複雜程度和程式設計師的編程能力。簡單地說,如果到了某個子集階段,可以很方便地利用現有功能實現C語言時,那麼你就找到N了。此版本還看到了C語言的開始,該語言用於編寫一些命令。 此處的代碼僅是某些命令,某些庫函數和C編譯器的原始碼。c /中的文件來自 last1120c.tar.gz 磁帶,並構成了第二版Unix的有效C編譯器。
  • C語言基礎知識學習(一)
    這類標識符可以另做他用,但將會失去原意,所以一般不另他用。c) 用戶標識符根據需要定義的標識符。一般用來給變量、函數、數組、文件等命名。用戶標誌符如果與C語言的關鍵字重名,系統報錯;若與標準庫函數重名,系統不報錯,但預定義標識符將會失去原意,代之以用戶新定義的含義。
  • R語言 | 繪製環圖示例
    它主要由柱形圖或餅圖轉化而來,將原本一個個豎直的柱子彎曲成圓環展示,或者將餅圖轉換為空心狀圓環。本篇白魚小編將使用R語言ggplot2包,通過幾個示例分享這類圓環圖的繪製方法。    首先對示例數據作個預處理,包括按數值高低排個序,以及選取特定作圖子集等。
  • Keras R語言接口正式發布,同時公開20個完整示例
    雷鋒網 AI科技評論消息,Keras R語言接口正式發布,並同時公開20個完整示例。這意味著Keras 本質上適合用於構建任意深度學習模型(從記憶網絡到神經圖靈機)兼容多種運行後端,例如TensorFlow、CNTK和 Theano如果你已經很熟悉Keras了,並且想要立刻體驗最新發布的R語言接口,請點擊如下網址:https://keras.rstudio.com,這裡有超過20個完整示例,相信有你需要的東西。
  • 十分鐘理解C ++中的運算符重載
    在C ++中,我們可以使運算符為用戶定義的類工作。這意味著C ++能夠為運算符提供數據類型的特殊含義,這種能力稱為運算符重載。例如,我們可以在String之類的類中重載運算符'+',以便僅使用+就可以連接兩個字符串。 算術運算符可能會重載的其他示例類是複數,小數,大整數等。
  • ARM中ADS環境下C語言和彙編語言混合編程及示例
    或者BL指令;  b 在使用物理寄存器時,不要使用過於複雜的C表達式,避免物理寄存器衝突;  c R12和R13可能被編譯器用來存放中間編譯結果,計算表達式值時可能把R0-R3、R12及R14用於子程序調用,因此避免直接使用這些物理寄存器;  d 一般不要直接指定物理寄存器;  e 讓編譯器進行分配內嵌彙編使用的標記是__asm或asm關鍵字,
  • 信息學競賽需要掌握哪些程式語言知識
    一、程式語言選擇信息學聯賽主要考的是程序設計,選擇合適的參賽程式語言是首要選擇,信息學競賽的程式語言有三種:pascal語言、c語言、c++語言,pascal語言將於2022年停止在信息學競賽中使用,所以現在學習pascal語言意義不大,剩下的只有選擇c語言和c++語言,實際考試中絕大多數考生選擇
  • 單片機c語言教程:C51運算符和表達式
    這個語句就是 typedef,這是個很好用的語句,但我卻不常用它,通常我定義變量的數據類型時都是使 用標準的關鍵字,這樣別人能很方便的研讀你的程序。如果你是個DELPHI 編程愛好者或是DELPHI程式設計師,你對變量的定義也許習慣了DELPHI 的關鍵字,如 int 類型常會用關鍵字Integer來定義,在用 單片機c語言時你還想用回這個的話,你能這樣寫:本文引用地址:http://www.eepw.com.cn/article/170888.htmtypedef int integer;
  • 51單片機基礎剖析(基於C語言)
    4.任何情況下都不能直接調用中斷函數,否則會主生編譯出錯。5.如果中斷函數中用到了浮點運算,必須保存浮點寄存器的狀態。當沒有其它的程序執行浮點運算時(即只有中斷中用到浮點運算),可以不用保存。但是可以使用定義的全局變量來進行參數傳遞。四、C51指針深度剖析(非常重要,嵌入式系統開發人員必須要掌握的內容)注意:由於篇幅所限,本人暫時不打算討論抽象指針的內容。但是你必須上網或去圖書館找找關於抽象指針的資料好好看看,抽象指針很有用的。
  • @呼和浩特家長,教育部門公布示例對照避免超標作業
    示例:若(x 2+p x+q)(x 2-2 x-3)展開後不含x 2,x 3項,求p,q的值。● 有理數教學中,超出了「知道 |a| 的含義,掌握加、減、乘、除和乘方的混合運算(以三步以內為主)」的要求。
  • 499,位運算解只出現一次的數字 III
    示例 :輸入: [1,2,1,3,2,5]輸出: [3,5]前面剛講過一個和這題類似的題494,位運算解只出現一次的數字,只不過第494題只有一個數字出現一次,但這題是有兩個數字只出現一次。>有了上面的3個公式,這題就很容易解了,假如數組的元素是[a,e,f,h,b,f,h,e]我們看到這個數組中只有a和b出現了一次,其他的元素都出現了2次。
  • 掌握R語言for循環一文就夠了(認真臉)
    R語言不考慮並行運算下的簡單批處理實現方式就是for循環。這裡用兩個for很巧妙,這樣可以規避計算了第r行與t行的相關數據及第t行與r行的相關數據,造成人為的重複運算N3=rownames(data)[t] #data行名的第t個數據,這個很好理解,data行名rownames(data)是一個有100個數據的向量vector,從1到100依次是每一行的行名,這裡[t]就取第t個數即第t行行名
  • C語言中的main()函數可以有好幾種類型,為何都能做入口函數呢?
    %d", 666);fun();fun(1, 2, 3, 4);上面幾行C語言代碼都是合法的。一般來說,C語言代碼被編譯為指令後,函數被調用時,它的參數是按照順序入棧的——要麼是從最左參數依次入棧,要麼是從最右參數依次入棧,函數執行完畢後,再依次出棧。
  • 5個簡單的步驟掌握Tensorflow的Tensor
    在這篇文章中,我們將深入研究Tensorflow Tensor的細節。我們將在以下五個簡單步驟中介紹與Tensorflow的Tensor中相關的所有主題:第一步:張量的定義→什麼是張量?它們非常類似於NumPy數組,並且它們是不可變的,這意味著一旦創建它們就不能被更改。只能使用編輯創建新副本。讓我們看看張量如何與代碼示例一起工作。但是首先,要使用TensorFlow對象,我們需要導入TensorFlow庫。
  • 定義只有一個數組成員的C語言結構體有什麼用?
    C語言代碼示例編譯並執行上述C語言代碼,得到如下輸出:# gcc t.c# ./a.outsizeof arr is 8可見,在函數 fun() 內部,sizeof(arr) 並不等於數組長度 16,而是等於 8(指針長度,我的機器是 64 位的,指針佔用內存空間為 8 個字節),這說明即使函數 fun() 的參數C語言代碼明確指定為 fun(char arr[16]),在函數內部,arr 還是退化成指針了。