求助c語言編寫位元組位互換,求助c語言編寫一個位元組位互換

2021-12-16 18:49:12 字數 3303 閱讀 1023

1樓:匿名使用者

支援任意兩位互換.

執行結果:

00000110 /* 輸入數字, 23位是1 45位是0 */00001010 /* 34互換後 */

00011000 /* 25也互換後 */**:#include

unsigned char mask(int n)void setbit(unsigned char *in, unsigned char n, unsigned char value)

unsigned char getbit(unsigned char in, unsigned char n)

void swap(unsigned char *in, int m, int n)

void showbin(unsigned char x)printf("\n");

}int main()

2樓:夢起

比如你要第二位和第三位互換,用00000010和00000100按位與把2,3位提取出來儲存,儲存的位元組再用移位二位的移到3位,3位的移到二位,再把原位元組和11111001相與,把2,3位變為了0,再跟前面提取並移位後的兩個結果相異或就得到結果了

~取非,&按位與,|按位或,異或用(~a&b)|(~b&a)

3樓:匿名使用者

怎麼換?

右移》左移<<

位與&位異或^

思路:0xf0位與,得到高位,<<4低位去高位,>>4高位去低位,再位或|得到新byte

void main()

再修改一下,上面的不順,位算符差了一個

void main()

輸出測試:

24 //0b00011000

input:24

step1:20

result:6 //0b00000110

4樓:雙魚座大叔

跟你說下思路吧 移位運算 然後再與或運算

c<<7 | (c<<5)&0x40 | (c<<3)&0x20 | (c<<1)&0x10 | (c>>1)&0x08 | (c>>3)&0x04 |(c>>5)&0x02| c>>7

5樓:匿名使用者

題目很簡單,但考察的是面試者的程式設計習慣和態度。今天閒來無事,多說幾句。題目理解為高半位元組和低半位元組互換:

最好用巨集定義 #define chg_byte(bdata) (((bdata)<<4)+((bdata)>>4))

注意,1、這種底層操作一般用巨集可以增強程式的效率,避免不必要的函式呼叫開銷;2、巨集定義最好用大寫;3、引數一定要用();4、引數前加個b說明書位元組型別的,5、巨集定義望文生 義,光看名稱就知道用途。以上幾點說明你有一個好習慣,會給面試官留下好印象。

或者用函式,也要注意函式的書寫格式

byte chgbyte(byte bdata)注意函式名大小寫,對齊格式等。 另外byte這樣定義:

typedef unsigned char byte;

這樣可以增強程式在不同硬體平臺的的可移植性。

面試官可能會問你《的含義和有限級別等相關問題,請提前準備

6樓:匿名使用者

這個效率比較高點

inline uint8_t rev(uint8_t x)或者void main()

這個應該可以了吧

一個位元組高低位互換,c語言怎麼寫??是51微控制器用。。。 50

7樓:仰詩苼

題目很簡單,但考察的是面試者的程式設計習慣和態度。今天閒來無事,多說幾句。題目理解為高半位元組和低半位元組互換:

最好用巨集定義 #define chg_byte(bdata) (((bdata)4)) 注意,1、這種底層操作一般用巨集可以增強程式的效率,避免不必要的函式呼叫開...3167

8樓:匿名使用者

tc裡面,無符型 unsigned int a=1000,b=10000;//都是16位的, 然後 unsigned long x=0; 則x=a*b;

9樓:但慈鄢懷

你每讀完一個位元組有沒有給

24c256傳送ack呢

寫時,是24c256給51迴應ack,讀時,每讀一個位元組,51都要給24c256迴應一個ack

c語言實現2個位元組的高低位轉化

10樓:匿名使用者

1、有除法,效率最低。rol指令,這個效率最高。 位操作效率比除法高, 效率比1高.。

2、例程:

#include

#define mask  0x00ff

void main()

11樓:延姝麗淡勝

2個位元組short

int高低位轉化:

short

inty=0x7f21;y=

((y&0xff00)

>>8)|

((y&0x00ff

)<<8);printf("%#x",y);

-------------------------------也可以利用

union

unionb2;

union

b2x;

unsigned

char

tmp;

x.i=0x1234;

tmp=

x.c[0];

x.c[0]=x.c[1];x.c[1]=tmp;

//也可以用上面的位運算方法交換高低端

printf("%#x\n",x.i);

//union

方法特別適合4位元組8位元組

大端小端碼的轉換操作。

12樓:

不太明白你的意思。

就是那兩個位元組的高位分別和低位調換嗎?!

13樓:龍嘯天風

迴圈移動嗎?還是整個翻個?

c語言怎麼處理2進位制位和1個位元組的轉換

14樓:

int x = char a &0x3f 後6位

int y =char a &0x40

int z = char a&0x80

15樓:匿名使用者

用位運算。

char bte1;

char extend = bte1 >> 7;

char length = (bte1 & 0x40) >> 6;

char mark = (bte1 & 0x3f) ;

c語言!!求助,C語言求助!!!

沒什麼問題,兩題給出的答案都是正確的。第2題 後面按c語言要求帶上規定的字元或數字,構成轉義字元,因此要想將 賦給字元變數ch,需要定義為 ch 而不是ch 選項a是錯誤的。其餘選項都是正確的。選a第9題 011表示八進位制數,轉為十進位制數是9,執行printf語句,a,是a先自增1 9 1 10...

c語言 求助,C語言求助!!

既然你程式編譯沒問題,執行結果也沒問題,那你這個程式就沒什麼錯誤啊。論邏輯上,你這個演算法也很合理,雖然不是最優演算法。有一個小技巧可以改進,那就是第二重迴圈的時候,k不用迴圈到i,只需要迴圈到sqrt i 也就是 根號i就行了。include void main k,i for k 0 s k k...

c語言問題,求助,C語言問題,求助!!

include int flower int num int main include int flower int num int main t 0 for i m i n i if t printf no n else printf n return 0 先回答你第一個問題,遞迴函式確實是讓ch...