當前位置:首頁 » 編程語言 » c語言取位數

c語言取位數

發布時間: 2022-04-17 15:12:35

c語言中如何提取二進制數中的某一位

下面是三種方式:

①通過模2除2(%2、/2)的方法

num%2——取出二進制的最後一位

num/2——右移去掉二進制的最後一位

通過while循環,依次取出二進制的最後一位數字判斷是否為1,若為1則count++,while(num)只有當num變為0時循環結束。

問題:在測試-1出現bug,-1的二進制中應該有32個1,輸出卻為0。我們將-1帶入代碼中發現-1%2=0,count不增,然後-1/2=0,循環結束,故輸出count的值為0。

解決方案:將變數num的數據類型改為unsigned int (無符號整型),此時表示的是正的整型的最大值,所以當num=-1時,表示二進制為32個1的正數,通過循環可以輸出正確的個數。

②通過右移操作符(>>)、按位與操作符(&)實現

Example:當num=10(1010),通過右移操作num>>i,二進制向右移動i位。

//i=0,num>>0,右移0位,此時(1010)&(0001)=0

//i=1,num>>1,右移1位,此時(0101)&(0001)=1,count++

//i=2,num>>2,右移2位,此時(0010)&(0001)=0

//i=3,num>>3,右移3位,此時(0001)&(0001)=1,count++

……

因為二進制共32位,所以循環要執行32次後結束,得到count為2。

缺點:不夠高效,必須循環32次。

③通過按位與操作符(&)巧妙運算實現

Example: 當num=15時,

1//num&(num-1)=(1111)&(1110)=(1110)

2//num&(num-1)=(1110)&(1101)=(1100)

3//num&(num-1)=(1100)&(1011)=(1000)

4//num&(num-1)=(1000)&(0111)=0 ,循環停止。共執行4次while循環。

(1)c語言取位數擴展閱讀

一、指定的某一位數置1

宏 #define setbit(x,y) x|=(1<<y)

二、指定的某一位數置0

宏 #define clrbit(x,y) x&=~(1<<y)

三、指定的某一位數取反

宏 #define reversebit(x,y) x^=(1<<y)

四、獲取的某一位的值

宏 #define getbit(x,y) ((x) >> (y)&1)



㈡ 有沒有大神能指點c語言如何用自定義函數求一個數的位數 謝謝大神

#include <stdio.h>
int wei(int num)
{
    int n=1;
    while(num/10)
    {
        n++;
        num = num / 10;
    }
    return n;
}
int main()
{
    int a=100,b=1000,c=10000;
    printf("%d:%d %d:%d %d:%d ",a,wei(a),b,wei(b),c,wei(c));
    return 0;
}

㈢ C語言取位函數的實現

我有點沒搞明白(45、81、673938)取最後一位是怎麼得出5138的,不是518嗎?

但還是隨便寫一下吧

#include<stdio.h>
#include<stdlib.h>
intgetLastBit(intnumber);

intmain()
{
inti=0,n=0;
intnumber=0,newnumber=0;
printf("輸入整數個數:");
scanf("%d",&n);

for(i=1;i<=n;i++)
{
scanf("%d",&number);
newnumber*=10;
newnumber+=getLastBit(number);
}
printf("新整數是:%d ",newnumber);
return0;
}

intgetLastBit(intnumber)
{
if(number<=0)
{
printf("錯誤! ");
exit(1);
}
else
returnnumber%10;
}

㈣ c語言里取一個數字的個,十位怎麼寫

代碼如下:

#include<stdio.h>

int main(){

int n = 56789;

int unitPlace = n / 1 % 10;

int tenPlace = n / 10 % 10;

int hundredPlace = n / 100 % 10;

int thousandPlace = n / 1000 % 10;

printf("個位:%d 十位:%d 百位:%d 千位:%d ", unitPlace, tenPlace, hundredPlace, thousandPlace);

getchar();

return 0;

}

運行結果:

個位:9

十位:8

百位:7

千位:6

(4)c語言取位數擴展閱讀:


C語言中的除法「/」和取余「%」

1、除法運算符「/」

二元運算符,具有左結合性。

參與運算的量均為整型時,結果為整型,捨去小數。

如果運算量中有一個為實型,結果為雙精度實型。

例如:

5/2=2,1/2=0

5/2.0=2.5

2、求余運算符「%」

二元運算符,具有左結合性。

參與運算的量均為整型。

求余運算的結果等於兩個數相除後的余數。

例如:

5%2=1,1%2=1

㈤ C語言怎樣提取一個數的十位個位百位千位

設一個數為n,則在C語言中其個位、十位、百位、千位依次這樣計算:n/1%10,n/10%10,n/100%10,n/1000%10

代碼如下:

#include<stdio.h>

int main(){

int n = 123456;

int unitPlace = n / 1 % 10;

int tenPlace = n / 10 % 10;

int hundredPlace = n / 100 % 10;

int thousandPlace = n / 1000 % 10;

printf("個位:%d 十位:%d 百位:%d 千位:%d ", unitPlace, tenPlace, hundredPlace, thousandPlace);

getchar();

return 0;

}

運行結果如圖:

(5)c語言取位數擴展閱讀

C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括弧、賦值、強制類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。

㈥ C語言中如何將一個數字的各個位上的數分別提取

#include<stdio.h>

int main()

{

int a;

int b[111]={0};//這里數組必須賦於初值,不然系統會隨機賦值,將輸出錯誤!賦值任何數

scanf("%d",&a);//都行!

int i=0;

while(a!=0)

{

b[i]=a%10;//將各個位的數賦值於數組b[i] ;

a/=10; //現在數組b[i]記錄的是各個位上的數的反序;

i++;//i記錄這個數是幾位數 ;

}

for(int j=i-1;j>=0;j--)

{

printf("%d ",b[j]);//最後反序輸出數組b[j];

}

return 0;

}

有不理解的地方,歡迎追問。望採納!

㈦ 怎樣用C程序提取一個3位數的各個數位

如果簡單點就int i=123;int k,s;k=i%10;個位數s=(i-100)/10;十位數i=i/100;//百位數

#include

<stdio.h>

void

main()

{

int

a;

int

b,c,d;//各個位數上的數字

printf("請輸入一個三位數:");

scanf("%d",&a);

b=a/100;

//百位

c=(a-b*100)/10;

//十位

d=a%10;

//個位

printf("百位:%d,十位:%d,個位%d ",b,c,d);

printf("它們的和是:%d ",b+c+d);

}

(7)c語言取位數擴展閱讀:

C語言有一個突出的優點就是適合於多種操作系統, 如DOS、UNIX,也適用於多種機型。C語言也有自身的不足,比如:C語言的語法限制不太嚴格,對變數的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。

C語言既有高級語言的特點,又具有匯編語言的特點;既是一個成功的系統設計語言,又是一個實用的程序設計語言;既能用來編寫不依賴計算機硬體的應用程序,又能用來編寫各種系統程序;是一種受歡迎、應用廣泛的程序設計語言。

㈧ 利用C語言怎樣求整數的位數以及各位數之和

#include <stdio.h>

int main(int argc, char **argv)
{
int a;
int sum = 0; //這是各位數的和
int NumWidth =0;//這是位數和
scanf("%d",&a);
while(a != 0)
{
sum += a%10 ; //求余可以得到這個數個位上的數字,然後把它加到sum中
a /= 10; //把這個數字除以10,然後再求余,可以得到10位
NumWidth ++;//每次循環,就可以得到位數。
}
printf("the number you input width= %d, sum = %d",NumWidth,sum);
return 0;
}

㈨ c語言里怎麼求任意正整數的位數

其實不用循環也可以做到,對其求以10為底的對數,然後取整數部分再加1,就是這個整數的位數.
下面是代碼:

#include<stdio.h>
#include<math.h>
void main()
{
int n;
printf("please input an integer:");
scanf("%d",&n);
printf("%d的位數是%d\n",n,(int)log10(n)+1);
}

㈩ c語言怎樣用for循環取出n位數(n由鍵盤輸入)的每位數並輸出

定義一個變數a,輸入變數並賦值,利用for循環,對a取余,輸出余數,除10操作,直到a等於0為止。
//參考代碼
#include<stdio.h>
int main()
{
int n,i;//定義整型變數
scanf("%d",&n);//輸入賦值
for(;n>0;){//對變數取余輸出余數,變數除10,直到變數等於0
printf("%d",n%10);//輸出余數
n/=10;//變數除10
}
printf("\n");
return 0;
}
/*運行結果:
123456
654321
*/

熱點內容
a演算法解決八數碼問題 發布:2025-01-22 14:32:39 瀏覽:273
python編譯exe 發布:2025-01-22 14:31:11 瀏覽:451
現在密碼箱多少錢 發布:2025-01-22 14:30:26 瀏覽:970
aspnet訪問access 發布:2025-01-22 14:14:15 瀏覽:924
鴻蒙系統和安卓的哪個耗電 發布:2025-01-22 14:12:46 瀏覽:577
上海大眾壓縮機 發布:2025-01-22 14:02:31 瀏覽:48
讀取excel的sql 發布:2025-01-22 13:59:58 瀏覽:865
帕里斯演算法 發布:2025-01-22 13:56:51 瀏覽:62
thinkphp模板php 發布:2025-01-22 13:41:22 瀏覽:894
老牛腳本 發布:2025-01-22 13:32:08 瀏覽:284