标签: C/C++

为什么负数取余操作(%)在c和python下结果不同

最近在用python,偶尔有一次涉及到了负数取余操作: -3 % 4

按照之前写c/c++、java的习惯,这里肯定是等于-3。但是python下返回的结果竟然是1

为什么会有不同的表现呢?先从取余操作本身说起:

 

关于取余(modulo operation)

取余的定义

由于不同的架构有不同的数字表示法和运算法,因此他们对于取余的定义也有可能略有不同。

一般来说,公认的取余操作(被除数a、除数n、商q以及余数rn % a = r)需要满足以下三条:

\begin{align}<br /><br /> q \,&\in \mathbb{Z} \\<br /><br /> a \,&= n q + r \\<br /><br /> |r| \,&< |n|.<br /><br /> \end{align}

然而这个定义是非常宽泛的。以 -3 % 4为例:

-3既可以表示为:-3 = 4 * -1 + 1

也可以表示为:-3 = 4 * 0 + (-3)

这两种表示法分别对应了两种实现方法:Truncated Division及 Floored Division。两种实现方法的求商方式不同,导致其最终结果也不同。 阅读详细 »

CuTime

寒假没几天了@_@ 想来各项事宜进展不顺利,归根结底是时间利用率不高
盯着bluehost日志的我就在想,干脆做个小软件来统计每天花在各个程序上的时间好了 阅读详细 »

STL之容器初探

说是stl的容器,其实这里主要就是比较vector、list和deque了。都能动态增加容量、以拷贝的方式存储对象的三者,各自的擅长领域是什么呢?

先试着对三位进行介绍,再进行基于超级不正规测试的能力大比拼!

阅读详细 »

关于C++中运算符重载的豆知识

就是总结一下运算符重载的一些细微小技巧,目前一共六条

今日程老师的课刚好提到运算符重载,正好小小应景一下

主要内容来源是《Effective C++》和《More Effective C++》这两本书

阅读详细 »

数组循环移位,你能想到多少种算法?

设计一个算法,把一个含有 N 个元素的数组循环右移K 位

例如: abcd12345循环右移5位,得到12345abcd 阅读详细 »

关于c中可变参数函数的实现及默认参数提升

先来讲可变参数函数,这个最常见的就是printf,scanf

一般来说这两个函数应该算是最早接触的那一批才是,但是其参数数目可变的特殊性却被我忽略了好久,直到前一阵程老师上课才发现

于是就稍微整理下好了,主要是va_list, va_start, va_arg, va_end的使用 阅读详细 »

关于struct的字节对齐

今天的课是由同届的同学来讲的,真是讲得好精彩!

就我个人感觉来看,已经达到平均水准以上了。稍稍留意了一下,无论是习惯、用语、节奏,都是与我一直接触的老师们别无二样;

作为和他一届的同学真是倍感压力。

啊话题扯远了,临下课前老师借由#pragma提到了struct字节对齐的内容,我也只是不久前刚了解的,真是堪堪赶上教学进度~于是写这篇日志总结顺便再温习一下。 阅读详细 »

初探#pragma

今天老师上课提到了宏定义的用途,抛出一个问题:

#pragma的哪个功能最常见?

我凭借印象回答说是once,老师没点我;在黑板上写下#pragma pack(1),引出struct的内存对齐。

不过凭印象里面,的确是#pragma once比较常见呀,还有去掉warning、链接lib什么的。可能和老师精通嵌入式开发有关

于是在这里整理下#pragma的几种常见用途好了

阅读详细 »

Day 8244 鲨1

那个该死的sha1终于被我弄完了,代码写得很土(使用了全局变量),但是功能基本都实现了;

注释也懒得写了;一个期望半小时搞定的程序竟然拖了三天,真是让人充满了鲨欲 阅读详细 »

[转载]为DrawPrimitiveUP(DrawUserPrimitive)洗冤

在做D3D画线时,处理顶点缓冲发现的问题!所以转一下

最初只因DXSDK文档里说了句推荐用Vertex Buffer而不要用DrawPrimitiveUP(C#里叫DrawUserPrimitive),DrawPrimitiveUP很快被描绘成传说 中的瘟疫,人人都在警告不要接近它。估计有人会想过,既然DrawPrimitiveUP这么不好,为什么还要提供它,难道只是为了显示DX也可以像 OpenGL一样简单地画三角形? 阅读详细 »