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語言入門要掌握哪些基礎知識?
    01C語言程序的結構認識用一個簡單的c程序例子,介紹c語言的基本構成、格式、以及良好的書寫風格,使小夥伴對c語言有個初步認識。2、main()——在c語言中稱之為「主函數」,一個c程序有且僅有一個main函數,任何一個c程序總是從main函數開始執行,main函數後面的一對圓括號不能省略。3、被大括號{ }括起來的內容稱為main函數的函數體,這部分內容就是計算機要執行的內容。
  • C語言|位運算(與運算,或運算,異或運算,取反,移位運算)
    與運算 &為按位與0的二進位補碼000000001的二進位補碼0000000115的二進位補碼00001111-1的二進位補碼111111112.或運算 |為按位或3. 異或運算 ^為按位異或,相同為0,不同為14. 取反 ~為按位取反5.
  • C語言中「c=a+b」,這種結構合理嗎?
    然後接著掃描,遇到一個+,+是一個二目運算符,它的左邊已經有一個運算數a++了,系統就向右搜索第二個運算數; 又遇到一個+,++比+的運算級別要高,這時,編譯系統就將兩個+看成一個整體來處理; 既然是++,編譯系統就認定,肯定它的左邊或右邊有一個變量,編譯系統先搜索左邊,發現++,不是變量;
  • C語言怎麼樣?今天聊聊C語言的發展史!
    後面的故事,大家可能也聽說過:後來學術和政府組織中都在使用Unix,也正是由於Unix的風靡與興盛,帶動了C語言被廣泛的傳播、使用。 在1980年代,C語言的使用廣泛傳播,並且幾乎所有機器體系結構和作業系統都可以使用編譯器。
  • 老婆餅裡沒老婆之用位運算實現加減乘除
    這裡我們用到的運算為取反,位運算符為 ~b1.2.3 乘法乘法的含義即為被乘數個乘數相加,說白了還是加法。1.2.4 除法除法的含義即為不停地用除數去減被除數,直到被除數小於除數時,此時所減的次數就是我們需要的商,而此時的被除數就是餘數。代碼實現了解完基本原理,寫代碼就是很簡單的事了。
  • 如何理解C語言中的移位運算?它們的用途是什麼?
    C語言中有三種位移運算:左移、邏輯右移和算術右移。左移和邏輯右移是完全相反的,但算術右移有點不一樣。左移的符號是「<<」,邏輯右移和算術右移都是「>>」。左移:如果把a<<4,即把[01100011]進行左移4位,這樣a就會變成[00110000]。這是如何變成的呢?這是把[01100011]最左邊的那4位砍掉,在剩下的4位的右邊補充4個零。
  • C+相比其他語言到底難在哪裡?
    看過程式語言排行榜的都知道,c/c++自02年以來,不管時代如何發展,其排名一直在前五以內,足見其在程式語言界的地位。編程界流行這麼一句話:c幾乎什麼都能做,c++幾乎什麼都能做好,足見其功能的強大。
  • C語言系列之sizeof
    這兩天沒有打卡記錄,一方面是學習的東西比較零散,沒辦法成體系的輸出,另一方面是生活也是和之前一樣,沒有太多有趣的事情可以記錄。今天主要是整理了一份C語言學習筆記,關於數據類型方面的。簡單型:int,char,short,long,float,double;簡單數據類型佔用空間如下表所示,複雜數據類型所佔的空間由具體內容確定,可以使用sizeof運算符確定這個數據類型所佔空間的大小。
  • R語言繪製堆疊柱形圖示例
    以下是使用barplot()繪製物種堆疊柱形圖的一個簡單示例,用於展示細菌類群組成豐度。#讀取數據phylum_top10 <- read.csv('phylum_top10.csv', row.names = 1, stringsAsFactors = FALSE, check.names = FALSE) #barplot() 作圖,可使用 ?
  • 「python opencv視覺零基礎實戰」七邏輯運算應用
    bitwise_and方法接收2個圖片數組為參數。首先我們讀取2個圖片1bit與1bit3。在這一串代碼中對img3與img1進行了邏輯與運算。)cv2.imshow("img1", img1)cv2.imshow("img3", img3)cv2.imshow("and_img", and_img)cv2.waitKey (0)cv2.destroyAllWindows()結果如下:以上使用的圖片與2.1示例中圖片一致。
  • 用C 語言描述AES256 加密算法
    很簡單,AES 狀態起始於我們要加密的 16 個字節。每個新步驟都會對狀態進行更新。處理狀態之前,我們需要將輸入字節串變為初始狀態,即 4 x 4矩陣(圖 1)。擴展秘鑰長度為:擴展秘鑰長度(字節)= 16 *(循環 + 1)這個步驟中的操作很簡單。輸入狀態字節與擴展秘鑰的 16 個字節進行異或運算。每個循環使用擴展秘鑰的不同部分;循環 0 使用字節 0 至 15,循環1 使用字節 16 至 31,以此類推。
  • C語言程序設計試題與答案B卷
    C語言試卷(B卷) 年 月考試級 專業一、單項選擇題(本題共有20個小題,A)算術運算、賦值運算、關係運算B)算術運算、關係運算、賦值運算C)關係運算、賦值運算、算術運算D)關係運算、算術運算、賦值運算5、下列運算符優先級最高的是( )。
  • C語言基礎(下)
    使用示例#include <stdio.h>#include<string.h>struct Student{char * name;};int main(){struct Student stu[2];stu[0] = (struct Student){"泱澈"};printf("%s\n", stu[0].name);return 0;}
  • 位運算就能做到,就不要寫那麼多代碼了【位運算奇淫技巧】
    前言 位運算隱藏在程式語言的角落中,其神秘而又強大,暗藏內力,有些人光聽位運算的大名的心中忐忑,還有些人更是一看到位運算就遠遠離去,我之前也是。但狡猾的面試官往往喜歡搞偷襲,抓住我們的弱點搞我們,為了防患於未然,特記此篇!
  • 教育部門公布示例對照避免超標作業
    示例:若(x2+px+q)(x2-2x-3)展開後不含x2,x3項,求p,q的值。● 有理數教學中,超出了「知道 |a| 的含義,掌握加、減、乘、除和乘方的混合運算(以三步以內為主)」的要求。● 關於梯形及其相關性質的證明。示例:求證:梯形的中位線等於兩底和的一半。● 相似三角形中,射影定理的證明和應用。● 圓內接四邊形的判定定理及其證明。● 研究同角三角函數之間的關係。
  • CPU運算電路:電晶體如何表示0和1
    如上圖所示,當b處電壓》e處電壓時,電晶體中c極和e極截止。當b處電壓《e處電壓時,電晶體中c極和e極導通;這只是一個簡化說明,實際上從模電角度分析,導通和截止的要求是兩個PN節正向偏置和反向偏置,還要考慮c極電壓,但在實際的數字電路中e極電壓和c極電壓一般恆定,要麼由電源提供、要麼接地,所以我們可以簡單記為「電晶體電路的通斷就是由b極電壓與恆定的e極電壓比較高低決定」。
  • 教育部門公布示例對照避免超標作業
    示例:若(x 2+p x+q)(x 2-2 x-3)展開後不含x 2,x 3項,求p,q的值。● 有理數教學中,超出了「知道 |a| 的含義,掌握加、減、乘、除和乘方的混合運算(以三步以內為主)」的要求。
  • 如何進行四則運算的?
    如上圖所示,當b處電壓>e處電壓時,電晶體中c極和e極截止;當b處電壓<e處電壓時,電晶體中c極和e極導通。這只是一個簡化說明,實際上從模電角度分析,導通和截止的要求是兩個PN節正向偏置和反向偏置,還要考慮c極電壓。
  • C語言程序設計試題及答案
    A) _121   B)121_   C) A*121   D) #12_14、在C語言中,要求運算的數必須是整數的運算符是( )。A) /   B)! A)369852147 B) 0L C) 3E4 D) (long)7458968、設n=10,i=4,則賦植運算n%=i+1執行後,n的值是( )。
  • C語言程序設計試題3
    amp;p1; D.p2=*p1;6.定義一個有4個元素的一維整型數組,正確的是(   )A.float a[4]; B.int a[]={1,2,3,4,5}; C.int a[]={1,2,3}; D.int a[4]={1}7.若變量a,b已經正確定義並賦值,符合C語言語法的表達式是