我正在嘗試撰寫一個使用位掩碼從十進制轉換為基數 4 的程式。首先,我撰寫了這個從十進制轉換為二進制的程式,以了解它是如何作業的
#include <stdio.h>
void binary(unsigned int num) {
int i;
unsigned temp, mask=1;
mask<<=31;
for(i=0; i<32; i ) {
temp=num&mask;
printf("%d", temp>>(31-i));
mask>>=1;
}
}
int main () {
int n;
printf("Enter a number:\n");
scanf("%d", &n);
binary(n);
return 0;
}
然后我在這里嘗試使用相同的方法
void base4(unsigned int num) {
int i;
unsigned temp, mask=3;
mask<<=15;
for(i=0; i<16; i ) {
temp= // <<<==== ???
printf("%d", temp>>(15-i)*2);
mask>>=1;
}
我知道在基數 4 中,數字使用 2 位。因此,如果我們對給定值的每一位進行與運算,讓我們說 22 與相應的位,mask=3我們最終會得到類似這樣的結果
.... 0 0 1 1 2 (base4)
.... 00 00 01 01 10 (bin)
我只是無法使用此資訊將其應用于我以前的方法,如果有人可以提供幫助,那就太好了。
uj5u.com熱心網友回復:
char *toBase4(char *buff, unsigned val, int printZeroes)
{
char *wrk = buff;
int shift = sizeof(val) * CHAR_BIT - 2;
unsigned mask = 3 << shift;
do
{
if((val & mask) || printZeroes)
{
*wrk = ((val & mask) >> shift) '0';
printZeroes = 1;
}
mask >>= 2;
}while((shift -= 2) >= 0);
*wrk = 0;
return buff;
}
int main(void)
{
char x[256];
printf("%s\n", toBase4(x, 0xff00, 0));
printf("%s\n", toBase4(x, 0xff00, 1));
}
uj5u.com熱心網友回復:
void base4(unsigned int num) {
int i;
unsigned int temp, mask=3;
mask<<=30;
for(i=0; i<16; i ) {
temp=num&mask;
printf("%d", temp>>(15-i)*2);
mask>>=2;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/487800.html
上一篇:列印從給定字母開始的整行
下一篇:C中的結構和typedef
