小编Gri*_*han的帖子

计算C中数据类型的范围

我正在研究K&R第二版,并且无法弄清楚为什么我会得到一定的结果.我正在解决的问题是计算数据类型的上限和下限.特别:

"编写一个程序来确定char,short,int和long变量的范围,包括有符号和无符号,通过从标准头文件中打印适当的值并直接计算.如果你计算它们会更难:确定各种浮动的范围 - 点类型."

我已经了解了按位运算符和两个人的称赞,并且我认为应该对签名数据类型有效,但是它适用于对我没有任何意义的无符号数据类型.这是代码:

#include <stdio.h>

main()
{
    signed int i;

    i = ~0;
    i >>= 1;
    printf("Upper limit: %d\n", i);
    printf("Lower limit: %d\n", -i -1);
}
Run Code Online (Sandbox Code Playgroud)

这将导致-1被打印为上限,0被打印为下限.但是,如果我将i更改为unsigned int,我会得到我期望的结果(2147483647和-2147483648).我无法解决这个问题,因为我的理解是unsigned int永远不会小于0,而signed int应该使用这些按位运算符,即如果它是32位系统,

~0 == 11111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)

,和

~0 >> 1 == 011111111111111111111111111111111, 
           or 2147483647.
Run Code Online (Sandbox Code Playgroud)

知道我哪里错了吗?

c

5
推荐指数
2
解决办法
5050
查看次数

*y ++和++*y之间的区别?

我对如何执行此代码感到困惑.假设我们有

int x=30,*y,*z;
y=&x;
Run Code Online (Sandbox Code Playgroud)

*y ++和++*y之间有什么区别?以及该计划的产出是什么?

#include<stdio.h>
int main(){

    int x=30,*y,*z;
    y=&x;
    z=y;
    *y++=*z++;
   x++;
   printf("%d %d %d ",x,y,z);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c pointers pointer-arithmetic

5
推荐指数
3
解决办法
8592
查看次数

将元组的格式和打印列表作为一行

我有一个包含从数据库查询生成的元组的列表,它看起来像这样.

[(item1, value1), (item2, value2), (item3, value3),...]
Run Code Online (Sandbox Code Playgroud)

元组将是混合长度,当我打印输出时它将看起来像这样.

item1=value1, item2=value2, item3=value3,...
Run Code Online (Sandbox Code Playgroud)

我已经找了一段时间试图找到一个解决方案,但.join()我找不到适用于这种情况的解决方案.

python tuples list

5
推荐指数
1
解决办法
7076
查看次数

为什么这个演员的结果不是左值?

我需要一些关于这种奇怪行为的建议 - 让我们有这个代码:

int ** p;
Run Code Online (Sandbox Code Playgroud)

编译没有任何麻烦:

p++;
Run Code Online (Sandbox Code Playgroud)

但是这个:

((int**)p)++;
Run Code Online (Sandbox Code Playgroud)

给我这个错误信息:“error: lvalue required as increment operand”.

我正在转向p它已经存在的类型,没有任何改变,那么问题是什么?这是我遇到的问题的简化版本,当我试图编译一个旧版本的时候gdb.所以我想,这样做有所改变.知道第二个例子有什么问题吗?

c casting rvalue lvalue

5
推荐指数
4
解决办法
1075
查看次数

选择具有不同区号的重复电话号码的所有行?

我有一个名为contacts以下字段的表:

+----+-------+--------------+
| id | name  | phone_no     |
+----+-------+--------------+
Run Code Online (Sandbox Code Playgroud)

假设,我在此表中有以下值:

+----+-------+--------------+
| id | name  | phone_no     |
+----+-------+--------------+
| 1  | Alex  | 9907661234   |--1, 2 are 
| 2  | Alex  | 09907661234  |--Same contacts but preceding with '0'
| 3  | John  | 9879612363   |--Same contacts but preceding with '91'
| 4  | John  | 919879612363 |-- 91 is (country code)
| 5  | Shawn | 9979867123   |
+----+-------+--------------+
Run Code Online (Sandbox Code Playgroud)

我想找到具有重复数字的重复联系人的数量(这里的数字在前面),0并且91是重复的.

我想要以下输出: …

mysql duplicates

5
推荐指数
1
解决办法
1702
查看次数

C程序,打印其可执行文件名

假设源代码文件名是test.cpp.编译时,它会生成test.exe文件.当我执行它时,它应该识别它的文件名test.exe并打印它.

我可以使用以下代码获取当前目录中存在的所有文件和目录的列表:

DIR * directory;
struct dirent * direct;
direct = readdir(directory);
Run Code Online (Sandbox Code Playgroud)

但是,如何识别相关的文件名,在这种情况下是哪个"test.exe"

c c++

5
推荐指数
3
解决办法
6731
查看次数

在Linux和Windows下实现信号?

我不喜欢在编程中使用信号.我主要使用C/C++和Python.但我很想知道如何在Linux(或Windows)中实际实现信号.

如果有任何注册信号需要处理,操作系统是否在信号描述符表中的每条CPU指令后检查?或者是流程经理/调度程序对此负责?

由于信号是异步的,CPU指令在完成之前是否会中断?

linux open-source operating-system linux-kernel systems-programming

4
推荐指数
1
解决办法
2017
查看次数

从任何观点来看,++ i和i + = 1之间的区别是什么

这是kn king的c编程问题:一种现代的方法.我无法理解他给出的解决方案: -

The expression ++i is equivalent to (i += 1). The value of both expressions is i after 
the increment has been performed.
Run Code Online (Sandbox Code Playgroud)

我怎么理解这个呢?

c operators

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

使用python解析JSON以根据条件获取值

我是 python 新手,尝试解析 json 文件并根据条件获取所需字段。

例如,如果 status = true,则打印名称

json文件:

[
  {
    "id": "12345",
    "name": "London",
    "active": true,
    "status": "true",
    "version": "1.0",
    "tags": [
    ]
  },
  {
    "id": "12457",
    "name": "Newyork",
    "active": true,
    "status": "false",
    "version": "1.1",
    "tags": [
    ]
  },
]
Run Code Online (Sandbox Code Playgroud)

预期输出:

名称 : 伦敦

请帮我解决这个问题。先感谢您。

python json

4
推荐指数
1
解决办法
5740
查看次数

字符串比较似乎不适用于从文件读取的行

我有一个名为test.txt包含以下内容的文件:

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

我有这样简单的Python程序:

f = open("test.txt")

myline = "Line 3"
for line in f:
    print myline + " - " + line
    if myline == line:
        print "We have a match!"

if myline == "Line 3":
    print "This works."
Run Code Online (Sandbox Code Playgroud)

我得到了这个结果:

Line 3 - Line 1

Line 3 - Line 2

Line 3 - Line 3

Line 3 - Line 4

This works.
Run Code Online (Sandbox Code Playgroud)

为什么不"我们有匹配!" 打印?

我错过了什么?

python

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