
C/CPP
laomai
扫尽风残雨败叶,尢剩傲雪斗霜枝
展开
-
C语言左移运算符对越界的处理
今天试了两段代码int i = 64;uint64 x = 1L<<i;原以为会输出0,但是在我的risv-v gcc编译器上运行结果为1另一个代码uint64 y = 1L << 64;这个代码运行后发现y的值为0.符合我的预期.不过这就导致了一个疑问,按我的理解x和y的值应该一样才对.为什么现在不一致呢.于是又实验了一个代码int i=65;uint64 z = 1L<<i这次z的值为2,即二进制的10.现在事情就比较明朗了,原创 2021-02-13 23:33:02 · 872 阅读 · 0 评论 -
让vs2019中可以执行scp命令
本文讲述了如何在vs2019中运行scp命令原创 2021-02-08 12:52:36 · 332 阅读 · 0 评论 -
在makefile中同时让C代码和汇编代码都自动生成.o文件
本文讲述了如何在makefile中同时让C代码和汇编代码都生成.o文件原创 2020-12-09 22:20:30 · 2956 阅读 · 0 评论 -
stl的比较器的规定
今天写一个测试代,码,片段如下:#include <vector>#include <algorithm>using namespace std;class Person{public: unsigned int age = 0; bool used = false;};inline bool operator<(const Person& A,const Person& B){ if (!A.used) return tru原创 2020-10-08 18:25:30 · 211 阅读 · 0 评论 -
用c++求解一道简单的数学题
最近在参加哆嗒数学网组织的闯关活动,第4关的题目为:用0到9组成一个无重复位的数字,要求结果不能是2、3或者5的倍数,即因子中不能含有2、3、5中的任何一个.求出满足条件的最大数字.今天闲来无事,用程序解决了这个问题.基本思路为,首先考虑十个数码全用的情况,此时各位的和为45,则此时无论怎么排列,结果都能被3整除,不符合题意.所以程序的任务是从这n=10个digit中删掉尽可能少的数字,使总和不能被3整除,然后把这些数位进行排列,把得到的结果从大到小排列,然后找出其中第一个满足因子不含2原创 2020-07-24 21:50:56 · 1094 阅读 · 0 评论 -
c++生成n选m的组合
题描述:有n个不同的数,现在要从中选取m个,需要按升序输出所有排列,比如从0到9中选出2个的所有无重复组合为0 10 20 30 40 50 60 70 80 91 21 31 41 5...7 87 98 9一共45个,c++代码为#include<cassert>#include<iostream>#include<algorithm>#include<set>#include<vecto原创 2020-07-24 21:27:39 · 1135 阅读 · 0 评论 -
c++输出n选m的所有排列
问题描述:有n个不同的数,现在要从中选取m个,需要按升序输出所有排列,比如从0到9中选出2个的所有排列为0 10 20 3...0 91 01 2...9 8一共10*9=90个c++代码为#include<iostream>#include<algorithm>#include<set>#include<vector>using namespace std;//获取下一个组合struct Permutati.原创 2020-07-24 20:37:13 · 966 阅读 · 0 评论 -
UVA207 ac心得
花了4天时间实现了刘汝佳紫书上的例题5-10,也就是UVA207,修改了5版才AC.这里把遇到的坑说一下,供后来者参考1、业余选手只参与排名,不参与分奖金,所以哪怕一个业余选手和其他职业选手同分(从而名次相同),也不输出T2、只有在同一个分数两名或者更多职业选手平分奖金时,这些职业选手的名次后面才输出T,算,所以对没获奖的名次,有多少人并列都不输出T,也就是输出T的条件是本名次的获奖人数&...原创 2018-07-23 18:59:55 · 741 阅读 · 0 评论 -
VS2015 控制excel 2013 实例
给了一个简单的在vs2015中控制excel的控制台代码原创 2016-12-16 10:32:41 · 5691 阅读 · 0 评论 -
编译原理程序设计实践(八)— 主程序代码和makefile文件
int main(int argc, char* argv[]){ for (char ch = ' ';ch <= '^';++ch) /* 这个循环把ssym数组全部填nul */ ssym[ch - ' '] = nul ; /* changed because of different character set note the typos below in the原创 2013-03-13 21:57:25 · 2075 阅读 · 0 评论 -
编译原理程序设计实践(九) 编译和测试
1、下载和按照MinGW,下载页面为:http://sourceforge.net/projects/mingw/files/latest/download?source=files,安装的时候最好全部安装,这样就带了一个最新的g++编译器,支持很多新特性。2、把makefile和main.cpp文件拷贝到同一目录下3、在MinGW Shell里用cd命令进入代码所在目录,再执行make命原创 2013-03-13 22:06:23 · 2433 阅读 · 0 评论 -
建立不透明平面风格的工具栏
本文叙述了如何在sdk环境下建立一个平面风格且不透明的工具栏原创 2013-07-18 21:41:51 · 1937 阅读 · 0 评论 -
在代码里设置程序的图标
最近在学习罗云彬大侠的win32汇编教程,顺便把windows的api和消息机制也好好学习了下。在学习"图标和光标"一节时遇到了一些问题,这里将主要实验步骤和结果列出,供后来者参考。一、实验前的准备 1、代码文件icon.cpp的内容:#include LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM原创 2013-06-25 10:29:22 · 11164 阅读 · 4 评论 -
精确覆盖问题学习笔记(五)——优化算法的实现代码
//文件node.h#pragma oncestruct CNode{ CNode* Left; //左节点指针 CNode* Right; //右节点指针 CNode* Up; //上节点指针,对列节点,则为本列最后一个元素的指针 CNode* Down; //下节点指针,对列节点,则为本列第一个元素的指针 int name;原创 2013-06-18 07:24:01 · 2093 阅读 · 0 评论 -
getline成员函数分析
今天一个学生写了如下代码段,其目的将一个文本文件的内容输出到屏幕上。ifstream in("file3.txt")char buf[3];while(!in.eof()) { in.getline(buf, sizeof(buf)); cout原创 2011-08-19 22:08:05 · 3053 阅读 · 1 评论 -
VC读取word
1.在VC中新建一控制台程序,选支持MFC(当然,你也可以不选择支持MFC的,不过会很麻烦) 2.按CTRL+W调出MFC ClassWizard,Add Class->From a type library,选择你的word的类型库(例如我的是word2003,安装在e盘,我的路径是"e:\edittools\microsoft office\office11\msword.olb"),选择完毕转载 2012-07-06 07:48:23 · 2380 阅读 · 0 评论 -
vc2008调试技巧之输出重定向
很多时候,调试控制台程序时需要把输出拷贝到一个文本文件中,此时可以用下面的技巧:1、按alt+f7,弹出项目属性窗口2、选"build events-> post build events",在右面的command line窗口中输入"$(TargetPath) >$(outdir)\1.txt"3、重新编译整个项目此时就会在debug目录下多了一个1,txt文件,里面就是程序运原创 2013-01-14 09:09:06 · 2255 阅读 · 2 评论 -
编译原理程序设计实践(三) 错误处理和词法分析代码
/* 出错处理过程error *//* 参数:n:出错代码 */void error(int n){ cout<<"****"<<setw(cc-1)<<'!'<<setw(2)<<n<<endl; /* 在屏幕cc-1位置显示!与出错代码提示,由于cc 是行缓冲区指针,所以!所指位置即为出错位原创 2013-03-13 21:43:07 · 5742 阅读 · 0 评论 -
编译原理程序设计实践(五) 语法分析的相关函数
语法分析采用递归子程序,基本上一条规则对应一个分析函数。声明处理的相关代码/* 常量声明处理过程constdeclaration */void constdeclaration(const int& lev, int& tx,int &dx){ if (sym == ident)/* 常量声明过程开始遇到的第一个符号必然应为标识符 */ { getsym( ); /原创 2013-03-13 21:50:31 · 2192 阅读 · 0 评论 -
编译原理程序设计实践(七)解释器的相关代码
/* 目标代码生成过程gen *//* 参数:x:要生成的一行代码的助记符 *//* y, z:代码的两个操作数 *//* 本过程用于把生成的目标代码写入目标代码数组,供后面的解释器解释执行 */void gen(fct x,int y, int z){ if (cx > cxmax) /* 如果cx>cxmax表示当前生成的代码行号大于允许的最大代码行数 *原创 2013-03-13 21:54:43 · 2063 阅读 · 0 评论 -
编译原理程序设计实践(四)一些辅助函数
/* 目标代码生成过程gen *//* 参数:x:要生成的一行代码的助记符 *//* y, z:代码的两个操作数 *//* 本过程用于把生成的目标代码写入目标代码数组,供后面的解释器解释执行 */void gen(fct x,int y, int z){ if (cx > cxmax) /* 如果cx>cxmax表示当前生成的代码行号大于允许的最大代码行数 *原创 2013-03-13 21:46:22 · 1401 阅读 · 0 评论 -
编译原理程序设计实践(二) 全局变量定义
以下各节的代码根据教材P288的附录A中的pascal代码改写而来。改写时的要求是1、尽量使用原有的变量名和类型名、函数名和参数名2、对c++中未提供的运算符或者函数,则额外实现3、尽量不改动原有的处理流程。此外,代码中的注释基本摘自技术高手李凡希的博客。地址为http://blog.youkuaiyun.com/lifanxi/article/details/3833 这里向这位技术大牛原创 2013-03-13 21:25:36 · 2115 阅读 · 0 评论 -
编译原理程序设计实践(六) 语句和子过程的处理代码
/* 语句处理过程statement *//* 参数说明:fsys: 如果出错可用来恢复语法分析的符号集合 */void statement(const symset& fsys,const int& lev, int& tx)/* 表达式处理过程expression *//* 参数说明:fsys: 如果出错可用来恢复语法分析的符号集合 */{ int i, cx1, c原创 2013-03-13 21:52:15 · 1881 阅读 · 0 评论 -
精确覆盖问题学习笔记(四)——算法优化
一、可优化的地方 上一节实现的代码从运行效率上看,有两个重大缺陷:1、每次递归调用前,需要将当前的状态矩阵拷贝一份,然后删除和当前行相交的所有行和列,得到新的矩阵,当矩阵非常大时,拷贝操作所需的时间和空间都很大。2、在实际情况中,矩阵M一般是稀疏矩阵,0的个数远远多于1的个数,如果我们能只处理含1的单元格的话,将大大提高运行的时空效率。二、优化所用到的数据结构 以下原创 2013-06-18 07:06:33 · 2385 阅读 · 0 评论 -
getline源代码简析
这个代码的注释参考了许多网友的心得,也加了一些我自己的体会,供后来者参考。C++标准库basic_istream类的getline成员函数有两个版本basic_istream& getline( char_type *_Str, streams原创 2011-08-19 22:48:45 · 3862 阅读 · 1 评论