1.设置a的bit3~bit7,保持其他位不变。
#include <stdio.h> int main(int args, char** argv) { // 给定一个整数 int a = 7; // 0b0111 // 将bit3设为1 a = (1<<3) | a; // 输出结果 printf("a = %d\n", a); // 15 0b1111 return 0; }
2.给定一个整形数a,设置a的bit3~bit7,保持其他位不变。
#include <stdio.h> int main(int args, char** argv) { // 给定一个整数 int a = 7; // 0b00000111 // 设置bit3~bit7为1 a = (0b11111 << 3) | a; // 输出十进制 printf("a = %d\n", a); // 255 // 输出十六进制 printf("a = 0x%x\n", a); // ff return 0; }
3.给定一个整型数a,清除a的bit15(为0),保证其他位不变。
#include <stdio.h> int main(int args, char** argv) { // 给定一个整数 int a = 0b1000000000000011; // 清除bit15为0 a = a & (~(1 << 15)); // 输出 printf("a = %d", a); return 0; }
4.给定一个整形数a,清除a的bit15~bit23,保持其他位不变。
5.给定一个整形数a,取出a的bit3~bit8。
#include <stdio.h> int main(int args, char** argv) { // 给定一个整数 int a = 0b111111111000000000000011; // 清除bit15~bit23为0 a = a & (~(0b111111111 << 15)); // 输出 printf("a = %d", a); return 0; }
#include <stdio.h> int main(int args, char** argv) { // 给定一个整数 int a = 0b10100101000; // 取出bit3~bit8 0b100101 = 37 a = ((0b111111 << 3) & a) >> 3; // 输出 printf("a = %d", a); return 0; }
6.用C语言给一个整形数的bit7~bit17赋值937(其余位不受影响)。
#include <stdio.h> int main(int args, char** argv) { // 给定一个整数 int a = 0b10100110000010000000; // 680064 // 给bit7~bit17赋值937 // 将10011000001 改为 01110101001 = 644224 a = a & (~(0b11111111111 << 7)) | (937 << 7); // 输出 printf("a = %d", a); return 0; }
7.用C语言将一个整形数的bit7~bit17中的值加17(其余位不受影响)。
#include <stdio.h> int main(int args, char** argv) { // 给定一个整数 int a = 0b10100110000010000000; // 680064 // 给bit7~bit17赋值+17 // 将10011000001 改为 10011010010 = 682240 a += (17 << 7); // 输出 printf("a = %d", a); return 0; }
8.用C语言给一个整形数的bit7~bit17赋值937,同时给bit21~bit25赋值17
#include <stdio.h> int main(int args, char** argv) { // 给定一个整数 int a = 0b10100110000010000000; // 680064 // 给bit7~bit17赋值937,同时给bit21~bit25赋值17 // 1)先改变bit7~bit17 a = a & (~(0b11111111111 << 7)) | (937 << 7); // 2)后改变bit21~bit25 a = a & (~(0b11111 << 21)) | (17 << 21); // 输出 printf("a = %d", a); return 0; }