小编Gri*_*han的帖子

表达式"j = ++(i | i);和j = ++(i&i);应该是左值误差?

我期待以下代码:

#include<stdio.h> 
int main(){
    int i = 10; 
    int j = 10;

    j = ++(i | i);
    printf("%d %d\n", j, i);

    j = ++(i & i);
    printf("%d %d\n", j, i);

    return 1;
}
Run Code Online (Sandbox Code Playgroud)

表情j = ++(i | i);j = ++(i & i);会产生错误,左值如下:

x.c: In function ‘main’:
x.c:6: error: lvalue required as increment operand
x.c:9: error: lvalue required as increment operand   
Run Code Online (Sandbox Code Playgroud)

但我惊讶于上面的代码编译成功,如下所示:

~$ gcc x.c -Wall
~$ ./a.out 
11 11
12 12   
Run Code Online (Sandbox Code Playgroud)

检查上面的代码是否正常工作. …

c optimization gcc pre-increment gcc4.4

44
推荐指数
4
解决办法
3696
查看次数

os.getcwd()vs os.path.abspath(os.path.dirname(__ file__))

我使用os模块在我的Django项目settings.py文件中有相对路径.变量SITE_ROOT设置为文件的当前工作目录,settings.py然后用于引用static/media同一目录中的所有目录.

继承人我的问题:

print os.getcwd()
print os.path.abspath(os.path.dirname(__file__))
Run Code Online (Sandbox Code Playgroud)

在settings.py中,上述语句都具有相同的输出.但我的模板只会在我使用时加载SITE_ROOT = os.path.abspath(os.path.dirname(__file__))

Django在这里寻找模板:

TEMPLATE_DIRS = (
    os.path.join(SITE_ROOT, 'templates'),
)
Run Code Online (Sandbox Code Playgroud)

SITE_ROOT设置os.getcwd()似乎让Django的查找模板文件夹的目录上面的settings.py文件

我可以很容易地不使用os.getcwd(),我的网站运行良好,但我很好奇这里可能会发生什么:)

谁知道?

python django

41
推荐指数
2
解决办法
3万
查看次数

指针表达式:**ptr ++,*++*ptr和++**ptr使用

我正在尝试使用C指针文献.在其中一个插图中,我遇到了以下代码.

# include <stdio.h>

int main()
{
     static int a[]={0,1,2,3,4};
     static int *p[]={a, a+1, a+2, a+3, a+4};

     int **ptr;

     ptr =p;

     **ptr++;
     printf("%d %d %d\n", ptr-p, *ptr-a, **ptr);

     *++*ptr; 
     printf("%d %d %d\n", ptr-p, *ptr-a, **ptr);

     ++**ptr;
     printf("%d %d %d\n", ptr-p, *ptr-a, **ptr);

     return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到输出为.

1 1 1
1 2 2
1 2 3
Run Code Online (Sandbox Code Playgroud)

我在为这个输出辩护时遇到了问题.我在副本上制作了很多盒子,以便轻松掌握问题.我能够证明输出的合理性1 1 1,我的麻烦始于声明,*++*ptr.

因为,一元运算符从右到左执行.因此,*ptr将首先处理,然后ptr将增加值.在这个增量之后,我不确定会发生什么,书中说不知何故p也会增加指向此数组中的下一个元素.输出1 2 2只能通过增量来实现p.

我不确定这种问题是否恰好适合stackoverflow.
我尽我所能,浪费了至少10页,上面画着盒子.

任何澄清将不胜感激.

c arrays pointers

29
推荐指数
2
解决办法
5524
查看次数

在IPython Notebook中进行漂亮的JSON格式化

是否有一种现有的方法可以让json.dumps()输出在ipython笔记本中显示为"漂亮"格式的JSON?

python json ipython-notebook

29
推荐指数
4
解决办法
2万
查看次数

为什么我不能用C-like语言做++ i ++?

半开玩笑地半开玩笑:为什么我不能++i++用C语言,特别是在C#中?

我希望它增加值,在我的表达式中使用它,然后再次递增.

c c# pre-increment post-increment

27
推荐指数
5
解决办法
5167
查看次数

错误代码与错误条件

我不明白为什么我们需要区分错误代码(std::error_code)和错误condition(std::error_condition),它们不是一样的吗?错误条件与错误代码有什么好处?

c++ c++11

27
推荐指数
3
解决办法
5258
查看次数

Linux中的Ctrl + C中断事件处理

我正在开发一个使用C++并使用Linux GNU C Compiler编译的应用程序.但是,我想调用一个函数,因为用户使用CtrlC 键来中断脚本.我该怎么办?任何答案将不胜感激.

c c++ linux signals

25
推荐指数
3
解决办法
7万
查看次数

Java:对负数进行右移

关于负数的右移操作我很困惑,这里是代码.

int n = -15;
System.out.println(Integer.toBinaryString(n));
int mask = n >> 31;
System.out.println(Integer.toBinaryString(mask));
Run Code Online (Sandbox Code Playgroud)

结果是:

11111111111111111111111111110001
11111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)

为什么要将负数移31而不是1(符号位)?

java bit-manipulation bit-shift bitwise-operators negative-number

24
推荐指数
2
解决办法
3万
查看次数

在数组char指针的情况下,'数组名称'是什么意思?

在我的代码中:

 char *str[] = {"forgs", "do", "not", "die"};
 printf("%d %d", sizeof(str), sizeof(str[0]));  
Run Code Online (Sandbox Code Playgroud)

我得到了输出12 2,所以我怀疑是:

  1. 为什么会有区别?
  2. 这两个strstr[0]是字符指针,对不对?

c pointers sizeof

22
推荐指数
3
解决办法
4313
查看次数

C中的模运算有哪些规则?

在早期的课程中,我被教导n % d = r并将其视为n = d*q + r,d除数在哪里,q是商,并且r是余数(注意其余部分永远不会是负数).

因此,例如,-111 mod 1110,因为-111 = -11*-11 + 10(相反-111 = -11*10 -1,看到这将如何给我们一个负余数).

但是,打印结果时-111 % 11,-1结果并非如此10.为什么?这在技术上是不是错了?

c modulus

21
推荐指数
2
解决办法
8838
查看次数