原始问题:unix时间戳的正确列格式是什么?
网络充满了混乱:一些帖子声称SQLite没有无符号类型 - 无论是什么,或者除了64位int类型(但有(反)示例调用UNSIGNED INTEGER).数据类型页面仅在bigint示例中提及它.它还声称有一个6字节的整数,但没有为它命名.似乎我尝试使用INTEGER将4字节签名的签名存储unix时间戳作为负数.我听说有些系统也会返回64位时间戳.OTOH我不太喜欢浪费4个字节来存储1个额外位(时间戳的最高位),即使我必须选择更大的数据格式,我宁愿选择6字节的数据格式.我甚至看过一篇声称SQLite unix时间戳是REAL类型的帖子...
完全问题:有人可以澄清一下这个烂摊子吗?
我有一个必须从N到0(包括)的循环.我的i变量的类型size_t通常是无符号的.我目前正在使用以下代码:
for (size_t i = N; i != (size_t) -1; --i) {
...
}
Run Code Online (Sandbox Code Playgroud)
那是对的吗?有没有更好的方法来处理这种情况?
谢谢,
文森特.
如果你知道变量永远不应该是负数,那么将变量声明为无符号是否很重要?它是否有助于防止除负数之外的任何东西被输入到不应该有它们的函数中?
关于uint_fast*_t类型族,C标准还不太清楚.在gcc-4.4.4 linux x86_64系统上,类型uint_fast16_t和uint_fast32_t大小均为8个字节.但是,8字节数的乘法似乎比4字节数的乘法慢得多.以下代码演示了:
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int
main ()
{
uint_least16_t p, x;
int count;
p = 1;
for (count = 100000; count != 0; --count)
for (x = 1; x != 50000; ++x)
p*= x;
printf("%"PRIuLEAST16, p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到了在程序上运行time命令
real 0m7.606s
user 0m7.557s
sys 0m0.019s
Run Code Online (Sandbox Code Playgroud)
如果我将类型更改为uint_fast16_t(和printf修饰符),则时间变为
real 0m12.609s
user 0m12.593s
sys 0m0.009s
Run Code Online (Sandbox Code Playgroud)
那么,如果stdint.h头文件uint_fast16_t(以及uint_fast32_t)定义为4字节类型,那会不会更好?
在以下程序中我使用了unsigned关键字.
#include <stdio.h>
int main()
{
unsigned char i = 'A';
unsigned j = 'B';
printf(" i = %c j = %c", i, j);
}
Run Code Online (Sandbox Code Playgroud)
输出:
i = A j = B
Run Code Online (Sandbox Code Playgroud)
是unsigned char i 相当于unsigned j?
我的一些顶点属性是单个无符号字节,我在我的GLSL片段着色器中需要它们,不是用于任何"真实"计算,而是用于比较它们(如果你愿意,就像枚举一样).我没有在GLSL中找到任何无符号字节或甚至是字节数据类型,所以有没有办法将它用作输入?如果不是(目前似乎是)GL_UNSIGNED_BYTE的目的是什么?
目前,我使用的是有符号值,-2 ^ 63到2 ^ 63-1.现在我需要相同的范围(2*2 ^ 64),但只有正值.我发现java文档提到unsigned long,它适合这种用法.
我试图将2 ^ 64声明为一个Long包装器对象,但它仍然丢失了数据,换句话说,它只捕获到了Long.MAX_VALUE,所以我显然遗漏了一些东西.是BigInteger的签署久,Java支持?
是否有关于如何声明和使用它的定义或指针?
在C中是否有一种无分支技术来计算两个无符号整数之间的绝对差值?例如,给定变量a和b,对于a = 3,b = 5或b = 3,a = 5的情况,我希望值为2.理想情况下,我还希望能够使用SSE寄存器对计算进行矢量化.
main() {
if ( -1 < (unsigned char) 1 )
printf("less than");
else
printf("NOT less than");
}
Run Code Online (Sandbox Code Playgroud)
打印less than.因为,(unsigned char) 1 转换为 (signed char) 1然后:(signed) -1 < (signed) 1,因此输出less than.
但是,如果我将上面的代码更改为if ( (-1 < (unsigned int) 1 )
那么输出就是NOT less than.
所以很明显,当我将unsigned char更改为unsigned int时:
int a = -1;'-1'相同的结果替代问题:
在有符号和无符号算术期间...如何确定签名是否将转换为无符号或反之亦然.
为什么unsigned char和char之间的算术转换不同:显然unsigned转换为signed和unsigned int和int:显然签名转换为unsigned
PS:我知道这不依赖编译器.所以不要说它.
由于在不存在限定符char时,C++中的a的性质是编译器相关的unsigned,是否有一个参数可以传递给GCC,这会强制所有的chars被编译为unsigned?