分类 编程语言 下的文章

一直以为Release和Debug的区别只是生成的代码不同,没想到这次被这个观点坑了一上午。 事情发生在配置完OpenCV后。 在编写测试程序,调用imread时,总是报如下错误: unresolved external symbol "bool __cdecl cv::imwrite... 回过头去看VS的配置,compiler的include和lib配置好了,linker的lib也配置好了(注:linker的additional libs支持*通配符) 在网上转了一上午,没有任何进展。直到神奇的StackOverflow再次登场 [click me],才发现了问题所在: 我的OpenCV是用Release配置的。 而测试项目的编写用的是Debug配置。不记得之前在哪里看过了,Debug配置生成的库文件会在文件名末尾加一个d,里面的内容也肯定和Release不一样。将项目配置改为Release,问题解决。

果然跟巨硬扯上关系的都是消耗时间的怪物。阿伟死了

在计组的课程学习中,打算动手实现一下IEEE 754的浮点数计算。首先要做的就是从机器中获取浮点数的存储格式,然后再自行编写反向生成的函数来进行验证和学习。

其中获取二进制存储的思路是用&(位与)运算符获取各位的二进制值。

然而,在编写完成的测试阶段遇到了这个问题: error: invalid operands to binary & (have 'float' and 'int')

代码是这么写的:

    ...
    bits[a] = val & 1;
    ...

其中bits为二进制码存储的数组,val为需要解析的浮点数。

经过一番测试,发现&运算符(其实不止,其它的位运算符也一样)的两侧似乎是只能放整形数据的。换句话说,根据个人理解,没有按照自然规则存储的浮点数是不允许进行位操作的。(真正的原因不一定是这个,还请有心人去阅读一下C/C++的官方手册,里面肯定有相关记载)但是,我的目的正是获得并理解这个“非自然的”存储规则。因而,经过在某度上的一番搜索,获得了一个解决思路:让编译器以为它是整形数据,并让它按照整形的规则进行读取。显然对数据进行类型转换是不行的,这样会直接改变它的存储方式。于是采取退而求其次的方法:指针。让编译后的代码按照整形的规则去读取浮点型的数据,其并不会检测内存中的数据类型,因而成功获得了目标数据。

代码更改如下:

    ...
    int *float_bits = (int*)&val;
    ...
    bits[a] = *float_bits & 1;
    ...

编译时未见报错,运行,成功获得期望数据。

参考链接:https://zhidao.baidu.com/question/533618345.html

网络有一大坏处,就是自由传播。尤其是在需要专业知识的领域,总有一些媒体自以为是,觉得网络上“大多认同”的观点即为正确观点,然后就写文章出来给大众看。懂的人看到了还好,至少不会受到其影响,嗤之以鼻而已;不懂的人看到了,“如获至宝”,对这“科普作者”很是感激。而正是懂行的人不愿意也不必对这些错误的东西进行纠正,才导致这些错误观点到处泛滥,以至于最后竟然到明白人面前班门弄斧。

让在下有感而发地写出这段措辞锋利的文字的,正是本次的主题,寻找Windows平台下的C/C++编译器。非科班人士对编程自然了解不多,编辑编译不分,看到“编辑器”,“IDE”可以写代码就一拍大腿,“哦!是这样啊!”,便把DEV-C++,VS等不是编译器的东西拿来瞎扯。tmd在网络上逛了一圈,清一色的DEV-C++,VS。(DEV-C++为编辑器,而VS为集成开发环境,是一套软件,包含了编辑器和编译器在内)。你怎么不说说JB家的CLion呢?Eclipse Cpp呢?都能写C/C++,咋没看见你提呢?

瞎BB了一大堆,接下来进入正题。就先简略地罗列一下吧,毕竟明天还要早起。

MinGW (Codeblocks默认搭档)
MinGW-w64
TDM-GCC (DEV-C++默认搭档)
Microsoft Visual C++ (MSVC, 是Microsoft Visual Studio的组件)
Intel C++ Compiler
DigitalMars (听过,暂时还没用过)
差点忘了,还有个有意思的Clang+LLVM组合

引用自: https://blog.csdn.net/TimEckel/article/details/77387500 该文并没有著名其原文的具体出处,就贴了个用户名

Thread类作为对象,其本身具有的功能是顺序执行指定功能(run()方法,即普通的函数功能)和异步执行指定功能(start()方法,在不阻塞后续代码执行的同时,执行自身的run()方法,即多线程特性,开启新线程来执行该方法)。对应的接口为Runnable。构造函数有如下形式:

Thread()
Allocates a new Thread object.
Thread(Runnable target)
Allocates a new Thread object.
Thread(String name)
Allocates a new Thread object.
Thread(ThreadGroup group, Runnable target)
Allocates a new Thread object.
Thread(ThreadGroup group, String name)
Allocates a new Thread object.
Thread(Runnable target, String name)
Allocates a new Thread object.
Thread(ThreadGroup group, Runnable target, String name)
Allocates a new Thread object so that it has target as its run object, has the specified name as its name, and belongs to the thread group referred to by group.
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
Allocates a new Thread object so that it has target as its run object, has the specified name as its name, and belongs to the thread group referred to by group, and has the specified stack size.

- 阅读剩余部分 -

起缘是为了让自己看博客看得更顺眼,就打算更改一下布局。 然后看到这个博客系统十分精简地在所有页面几乎采取了同一个文件作为模板,也就是说,牵一发而动全身。

毕加思索.jpg 这玩意儿不支持图片居中。 https://github.com/kokororin/typecho-plugin-Parsedown 加个这个插件就好了,但是似乎不支持html标签里的markdown语法。

好在主页和文章页面是分开的,还可以通过在文章区用js来仅仅更改这部分的布局。

然后就有了然后:

  1. margin, padding; float

    margin为外边距,即若margin不为负,则元素尺寸不小于原尺寸,按顺序可设置上右下左四个方向的值; padding为内边距,即若padding不为负,则元素尺寸不大于原尺寸,参数及意义同上。 且似乎仅有margin可使用auto值。

    float决定元素的浮动方向, 似乎通常只有左(left)右(right)无(none)三种情况(继承inherit本身并不是浮动方式就不包括在内了吧)。none具体是什么情况我也不清楚。

  2. 用js获取页面元素

    var elem = document.getElementById("element-id");
  3. 修改元素属性

    elem.setAttribute("attribute-name", "attribute-value");
  4. 加载页面自动执行
    window.onload = function() {
    your_functions();
    }

唔姆,大概就差不多了。 具体的例子就写在网站代码里,欢迎各位dalao前来观摩 反正问题不大,就打打补丁,不去改源码算了