我已经在很多地方读过,整数溢出在C中定义得很好,与签名对应物不同.
下溢是一样的吗?
例如:
unsigned int x = -1; // Does x == UINT_MAX?
Run Code Online (Sandbox Code Playgroud)
谢谢.
我不记得在哪里,但我在某处读到无符号整数类型的算术是模块化的,所以如果是这种情况那么-1 == UINT_MAX mod(UINT_MAX + 1).
我正在为我的大学编写一个编译器/语言课程的玩具C编译器.
我试图在C中充实符号解析的语义,并提出了我尝试对常规编译器clang&gcc的测试用例.
void foo() { }
int main() { foo(5); } // foo has extraneous arguments
Run Code Online (Sandbox Code Playgroud)
大多数编译器似乎只是警告无关的论点.
问题:这背后的根本原因是什么?
对于我的符号表生成/解析阶段,我正在考虑一个函数是一个带有返回类型的符号,以及几个参数化的参数(基于语法),每个参数都有一个相应的类型.
谢谢.
我正在尝试将一些unsigned int数据打包到使用创建的字符串缓冲区中ctypes.create_string_buffer
.
以下是代码段,以及显示错误在键盘上的运行示例:
import struct
import ctypes
import binascii
buf = ctypes.create_string_buffer(16)
struct.pack_into("=I=I=I", buf, 0, 1, 2, 3)
print binascii.hexlify(buf)
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
...
struct.error: bad char in struct format
Run Code Online (Sandbox Code Playgroud)
如果底层缓冲区是特定的C类型,则文档不会提示您是否可以打包不同类型的数据.在这种情况下,尝试将unsigned int数据打包到具有底层c_char类型的字符串缓冲区中.任何人都知道这样做的解决方案,或者是否有特定的方法来创建可以打包任何类型的数据的缓冲区?
我想合并线条,使合并的线条在同一边界上对齐.当所有行在相同的选项卡边界处相遇时,UNIX paste(1)可以很好地完成此操作,但是当行的大小不同时(在文件中将行合并到其中),文本会出现问题.
具有所需效果的糊剂(1)的实例:
$ echo -e "a\nb\nccc\nd" | paste - -
a b
ccc d
Run Code Online (Sandbox Code Playgroud)
膏剂(1)的实例具有不希望的效果:
$ echo -e "a\nb\ncccccccccccc\nd" | paste - -
a b
cccccccccccc d
Run Code Online (Sandbox Code Playgroud)
请注意第二列如何排列.我希望'b'与'd'对齐,这需要一个额外的标签.不幸的是我相信这是粘贴实用程序的限制,所以如果有人知道如何获得上面所需的效果,我很乐意听到它.
要在同一页面上,我们假设sizeof(int)= 4和sizeof(long)= 8.
给定一个整数数组,逻辑上将数组移位到左侧或右侧的有效方法是什么?
我正在考虑一个辅助变量,如long,它将计算第一对元素(索引0和1)的bitshift并设置第一个元素(0).以这种方式继续元素的位移(索引1和2)将是计算机,然后将设置索引1.
我认为这实际上是一种相当有效的方法,但也有缺点.我不能比特位移大于32位.我认为使用多个辅助变量会起作用,但我正在设想沿线的某个地方进行递归.
我想构建一个哈希表,查找从1到15个字节的字节序列(字符串)中的键.
我想存储一个整数值,所以我想一个哈希数组就足够了.我很难概念化如何构造一个哈希函数,因为给定键会给出数组的索引.
任何援助都会受到很多关注.
散列中的最大条目数为:4081*15 + 4081*14 + ... 4081 = 4081((15*(16))/ 2)= 489720.
例如:
int table[489720];
int lookup(unsigned char *key)
{
int index = hash(key);
return table[index];
}
Run Code Online (Sandbox Code Playgroud)
哈希函数有什么好的选择,或者我将如何构建一个?
谢谢.
我在并行模式下使用GNU xargs(版本4.2.2),当重定向到文件时,我似乎可靠地丢失输出.重定向到管道时,它似乎正常工作.
以下shell命令演示了该问题的最小,完整和可验证的示例.我生成了2550个数字,xargs
用于将它分成100个args的行,每行总共26行,其中第26行只包含50个args.
# generate numbers 1 to 2550 where each number is on its own line
$ seq 1 2550 > /tmp/nums
$ wc -l /tmp/nums
2550 /tmp/nums
# piping to wc is accurate: 26 lines, 2550 args
$ xargs -P20 -n 100 </tmp/nums | wc
26 2550 11643
# redirecting to a file is clearly inaccurate: 22 lines, 2150 args
$ xargs -P20 -n 100 </tmp/nums >/tmp/out; wc /tmp/out
22 2150 10043 /tmp/out
Run Code Online (Sandbox Code Playgroud)
我认为问题与底层shell无关,因为shell将在命令执行之前执行重定向并等待xargs完成.在这种情况下,我假设xargs在刷新缓冲区之前完成.但是,如果我的假设是正确的,我不知道为什么在写入管道时这个问题不会出现. …
可能重复:
如何有效地生成0和上限N之间的K个非重复整数列表
有什么替代方法可以生成[0,8000]范围内的1000个不同的随机整数,而不是以下方法:
有没有一种有效的方法可以得到最小的非负残差模n,其中n是正的,在C?
如果数字是非负数,那么这很容易,那么它只是%n(其中a是非负整数).
但是当a为负数时,C89中的行为似乎是实现定义的(感谢kennyTM).即-2%11 = -2或9.