c語言取位數
㈠ 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
*/