设置二进制或者16/32位的某一位的值
生活随笔
收集整理的這篇文章主要介紹了
设置二进制或者16/32位的某一位的值
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
- 設(shè)置某一位的值
- 傳送門:獲取二進(jìn)制或者16/32位的某一位的值
- 1 | 任何值 = 1 ,任何值&0 = 0 【利用這兩點(diǎn)進(jìn)行設(shè)置值】
- 上代碼
- //獲取二進(jìn)制某一位的值
uint8_t get_one_bit_value(uint32_t src, uint8_t bit_num)
{return (uint8_t)((src >> (bit_num - 1)) & 1);
}//設(shè)置二進(jìn)制某一位的值
uint32_t set_one_bit_value(uint32_t src, uint8_t bit_num,bool bit_value)
{if(bit_value){return (uint32_t)((src |= (1 << (bit_num - 1))));//置1}else{return (uint32_t)((src &= ~(1 << (bit_num - 1))));//置0}}
int main()
{uint32_t test_v = 0x12345678; //0001[1] 0010[2] 0011[3] 0100[4] 0101[5] 0110[6] 0111[7] 1000[8] uint32_t test_u = 0; uint8_t i, j; //[高位>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>低位]uint8_t test_buff_u[32] = {0};uint32_t test_buff_v[32] = {0};for (i = 1; i <= 32; i++){test_buff_u[i - 1] = get_one_bit_value(test_v, i);}for (i = 1; i <= 8; i++){for (j = 1; j <= 4; j++){printf("%d|", test_buff_u[(i - 1) * 4 + (j - 1)]);}printf("\n");}for (i = 1; i <= 32; i++){test_buff_v[i - 1] = set_one_bit_value(test_u, i,(bool)test_buff_u[i-1]);}for (i = 1; i <= 8; i++){for (j = 1; j <= 4; j++){printf("%08x|", test_buff_v[(i - 1) * 4 + (j - 1)]);}printf("\n");}
}
打印結(jié)果:
- 0|0|0|1| 1|1|1|0| 0|1|1|0| 1|0|1|0| 0|0|1|0| 1|1|0|0| 0|1|0|0| 1|0|0|0| 00000000|00000000|00000000|00000008|[第1、2、3置0,第4位置1] 00000010|00000020|00000040|00000000|[第1、2、3置1,第4位置0] 00000000|00000200|00000400|00000000| 00001000|00000000|00004000|00000000| 00000000|00000000|00040000|00000000| 00100000|00200000|00000000|00000000| 00000000|02000000|00000000|00000000| 10000000|00000000|00000000|00000000|
- 看不懂請(qǐng)?zhí)釂?wèn)一下,有一點(diǎn)點(diǎn)繞?
總結(jié)
以上是生活随笔為你收集整理的设置二进制或者16/32位的某一位的值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 获取二进制或者16/32位的某一位的值
- 下一篇: NOP (code)_NOP指令作用及解