标签: unsigned

SQlite:unix时间戳的列格式; 整数类型

原始问题:unix时间戳的正确列格式是什么?

网络充满了混乱:一些帖子声称SQLite没有无符号类型 - 无论是什么,或者除了64位int类型(但有(反)示例调用UNSIGNED INTEGER).数据类型页面仅在bigint示例中提及它.它还声称有一个6字节的整数,但没有为它命名.似乎我尝试使用INTEGER将4字节签名的签名存储unix时间戳作为负数.我听说有些系统也会返回64位时间戳.OTOH我不太喜欢浪费4个字节来存储1个额外位(时间戳的最高位),即使我必须选择更大的数据格式,我宁愿选择6字节的数据格式.我甚至看过一篇声称SQLite unix时间戳是REAL类型的帖子...

完全问题:有人可以澄清一下这个烂摊子吗?

sqlite unsigned types integer unix-timestamp

11
推荐指数
2
解决办法
9517
查看次数

对于使用无符号整数时循环条件停止为0?

我有一个必须从N到0(包括)的循环.我的i变量的类型size_t通常是无符号的.我目前正在使用以下代码:

for (size_t i = N; i != (size_t) -1; --i) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

那是对的吗?有没有更好的方法来处理这种情况?

谢谢,

文森特.

c unsigned for-loop

11
推荐指数
3
解决办法
1809
查看次数

将变量声明为无符号的重要性

如果你知道变量永远不应该是负数,那么将变量声明为无符号是否很重要?它是否有助于防止除负数之外的任何东西被输入到不应该有它们的函数中?

c++ variables unsigned

11
推荐指数
2
解决办法
4787
查看次数

为什么uint_least16_t比uint_fast16_t快于x86_64中的乘法?

关于uint_fast*_t类型族,C标准还不太清楚.在gcc-4.4.4 linux x86_64系统上,类型uint_fast16_tuint_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字节类型,那会不会更好?

c unsigned x86-64 multiplication

11
推荐指数
2
解决办法
2983
查看次数

unsigned char i是否等同于unsigned j?

在以下程序中我使用了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

c unsigned types

11
推荐指数
3
解决办法
1781
查看次数

GLSL中的(无符号)字节

我的一些顶点属性是单个无符号字节,我在我的GLSL片段着色器中需要它们,不是用于任何"真实"计算,而是用于比较它们(如果你愿意,就像枚举一样).我没有在GLSL中找到任何无符号字节或甚至是字节数据类型,所以有没有办法将它用作输入?如果不是(目前似乎是)GL_UNSIGNED_BYTE的目的是什么?

opengl unsigned byte types glsl

11
推荐指数
1
解决办法
3112
查看次数

Java中的无符号长整数

目前,我使用的是有符号值,-2 ^ 63到2 ^ 63-1.现在我需要相同的范围(2*2 ^ 64),但只有正值.我发现java文档提到unsigned long,它适合这种用法.

我试图将2 ^ 64声明为一个Long包装器对象,但它仍然丢失了数据,换句话说,它只捕获到了Long.MAX_VALUE,所以我显然遗漏了一些东西.是BigInteger的签署久,Java支持?

是否有关于如何声明和使用它的定义或指针?

java unsigned biginteger long-integer

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

使用SSE计算无符号整数之间的绝对差值

在C中是否有一种无分支技术来计算两个无符号整数之间的绝对差值?例如,给定变量a和b,对于a = 3,b = 5或b = 3,a = 5的情况,我希望值为2.理想情况下,我还希望能够使用SSE寄存器对计算进行矢量化.

c++ unsigned sse

10
推荐指数
3
解决办法
7974
查看次数

算术运算期间的数据类型提升:-1 <(unsinged int)1 == false

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时:

  • (signed)-1转换为unsigned int [正好相反]
  • 因为-1被存储为2的恭维1; 位模式评估为255(可能)
  • 因此255 <1将评估为false,否则将执行.
  • 即使你代替int a = -1;'-1'相同的结果替代

问题:

  1. 在有符号和无符号算术期间...如何确定签名是否将转换为无符号或反之亦然.

  2. 为什么unsigned char和char之间的算术转换不同:显然unsigned转换为signed和unsigned int和int:显然签名转换为unsigned

PS:我知道这不依赖编译器.所以不要说它.

c unsigned integer-promotion

10
推荐指数
1
解决办法
2420
查看次数

Gcc:强制编译器默认使用unsigned char

由于在不存在限定符char时,C++中的a的性质是编译器相关的unsigned,是否有一个参数可以传递给GCC,这会强制所有的chars被编译为unsigned

c++ unsigned gcc char

10
推荐指数
3
解决办法
9582
查看次数