我正在使用 C 语言开发微控制器。其中一部分涉及更改寄存器中的位值。我想出了一些宏来使事情变得更容易:
#define BIT_SET(addr, shift) (addr | (1 << shift))
#define BIT_RESET(addr, shift) (addr & ~(1 << shift))
#define BIT_GET(addr, shift) (addr & (1 << shift))
...
reg1 = BIT_SET(reg1, 3); //set bit 3
...
Run Code Online (Sandbox Code Playgroud)
但是,现在我想制作一个可以一次更改几位的宏。例如,可能想要将 的前 3 位更改10101010为110,从而得到数字11001010。
我可以在 C 中做到这一点吗?还是我以错误的方式接近这个?
我正在尝试使用fstream将包含自定义对象的STL地图保存到文件中.我使用<<和>>运算符重载这样做.
#include <iostream>
#include <string>
#include <map>
#include <fstream>
#define DELIM '/'
struct Point{
public:
int x, y;
};
//operator overloads for point
std::istream& operator>>(std::istream& is, Point& p){
std::string input;
std::getline(is, input, DELIM);
p.x = std::stoi(input);
std::getline(is, input, DELIM);
p.y = std::stoi(input);
return is;
}
std::ostream& operator<<(std::ostream& os, Point& p){
os << p.x << DELIM << p.y << DELIM;
return os;
}
//operator overloads for map<string, point>
std::istream& operator>>(std::istream& is, std::map<std::string, Point>& m){
std::string input;
std::getline(is, input, DELIM);
int map_size …Run Code Online (Sandbox Code Playgroud)