第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

數(shù)據(jù)壓縮位操作中的一個(gè)函數(shù)bit_rot_left "位向左輪轉(zhuǎn)"看不懂,望指點(diǎn)

數(shù)據(jù)壓縮位操作中的一個(gè)函數(shù)bit_rot_left "位向左輪轉(zhuǎn)"看不懂,望指點(diǎn)

蕪湖不蕪 2019-04-13 08:45:42
下面代碼中bitget和bitset是bitrotleft中要用到的簡(jiǎn)單函數(shù),功能分別是取得和設(shè)置指定位的bit值,我很難看懂bitrotleft函數(shù),雖然書上簡(jiǎn)介寫的很簡(jiǎn)單:輪轉(zhuǎn)緩沖區(qū)bits(含size位),將位值向左移count位.此操作完成后,處于最左端的count位移動(dòng)到緩沖區(qū)最右端,而且其他的位也相應(yīng)的輪轉(zhuǎn).但是我在main函數(shù)的測(cè)試中好像并不如意,代碼如下:#include#includeintbit_get(constunsignedchar*bits,intpos){unsignedcharmask;inti;/*設(shè)置掩碼*/mask=0x80;for(i=0;i>1;/*獲得當(dāng)前位的數(shù)值*/return(((mask&bits[(int)(pos/8)])==mask)?1:0);}voidbit_set(unsignedchar*bits,intpos,intstate){unsignedmask;inti;mask=0x80;for(i=0;i>1;if(state)bits[pos/8]|=mask;elsebits[pos/8]&=(~mask);return;}voidbit_rot_left(unsignedchar*bits,intsize,intcount){intfbit,lbit,i,j;/*Rotatethebuffertotheleftthespecifiednumberofbits.*/if(size>0){for(j=0;j
查看完整描述

2 回答

?
德瑪西亞99

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊

測(cè)試程序應(yīng)該這樣寫才對(duì):
intmain()
{
unsignedcharbits[3]={0x4b,0xdb,0};
bit_rot_left(bits,16,2);
printf("%#x,%#X,%#x",bits[0],bits[1],bits[2]);
}
輸出是
0x2f,0x6D,0
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-13
?
慕村9548890

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊

嗯你那個(gè)程序有錯(cuò)。。。我沒有去調(diào)試它,不過我寫了一個(gè)好用的:
#include
intgcd(inta,intb)
{
returnb==0?a:gcd(b,a%b);
}
voidswap(unsignedchar*a,unsignedchar*b)
{
unsignedchartmp=*a;
*a=*b;
*b=tmp;
}
voidrot1(unsignedchar*bits,intsize,intcount)
{
intm=gcd(size,count),i,j;
unsignedchartmp;
count%=size;
count=size-count;
for(i=0;i{
tmp=bits[i];
for(j=i+count;j!=i;j+=count)
{
if(j>size)
j-=size;
swap(&tmp,bits+j);
}
bits[i]=tmp;
}
}
voidrot2(unsignedchar*bits,intsize,intcount)
{
inti;
unsignedcharmask=~0<<(8-count),tmp1=0,tmp2;
for(i=size-1;i>=0;i--)
{
tmp2=(mask&bits[i])>>(8-count);
bits[i]<<=count;
bits[i]|=tmp1;
tmp1=tmp2;
}
bits[size-1]|=tmp1;
}
voidbit_rot_left(unsignedchar*bits,intsize,intcount)
{
rot1(bits,size,count/8);
rot2(bits,size,count%8);
}
voidprint_bits(unsignedchar*bits,intsize)
{
inti,j;
for(i=0;ifor(j=0x80;j;j>>=1)
printf("%d",!!(j&bits[i]));
printf("\n");
}
intmain()
{
unsignedcharbits[]="10010101";
print_bits(bits,8);
bit_rot_left(bits,8,2);
printf("%s\n",bits);
print_bits(bits,8);
return0;
}
輸出如下
0011000100110000001100000011000100110000001100010011000000110001
????????
1100010011000000110000001100010011000000110001001100000011000100
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-13
  • 2 回答
  • 0 關(guān)注
  • 731 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)