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...