标签: unsigned-integer

SQL Server 2008 - 无符号整数数据类型

我正在使用SQL SERVER 2008,我在各种表中都有一些INT,SMALLINT字段,而且我知道它们都是0或大于0,即我可以将它们取无符号.

是否有一种创建/使用无符号数据类型的简单方法,或者我必须创建类型 - >生成规则 - >使用创建类型; 如下文所述?

http://www.julian-kuiters.id.au/article.php/sqlserver2005-unsigned-integer

如果这是在SQL中使用Unsigned的唯一方法,那么使用它有什么缺点/缺点吗?

sql sql-server-2008 sqldatatypes unsigned-integer

8
推荐指数
1
解决办法
3万
查看次数

将枚举定义转换为unsigned int

根据这篇SO帖子:
C中枚举的大小是多少?
枚举类型有signed int类型.

我想将枚举定义从转换signed intunsigned int.

例如,在我的平台上,a unsigned int是32位宽.我想创建一个枚举:

typedef enum hardware_register_e
{
    REGISTER_STATUS_BIT = (1U << 31U)
} My_Register_Bits_t;
Run Code Online (Sandbox Code Playgroud)

我的编译器抱怨上面的定义超出范围(它用于a signed int).

我如何申报unsigned int enum价值?

编辑1:

  1. 首选项不是扩展到64位(因为代码驻留在嵌入式系统中).
  2. 由于技能限制,此项目不允许使用C++.:-(

编辑2:

  • 编译器是ARM​​7的IAR Embedded Workbench.

c enums casting iar unsigned-integer

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

为什么C隐式转换的运行方式与它们一样?

当整数不在类型的范围内时,最大值+ 1被加/减(取决于该数字范围的哪一部分).例如,

unsigned short num = 65537;
Run Code Online (Sandbox Code Playgroud)

num的值为1(减去65536).我的问题是:为什么会发生?我的直觉告诉我它与进位标志和溢出标志有关,因为最大值总是1111 ....

提前致谢!

c integer c89 implicit-conversion unsigned-integer

7
推荐指数
1
解决办法
144
查看次数

这种按位转换安全吗?

我遇到一种情况,需要将 16 位打包成 64 位数字,然后将它们作为 [ -32768, 32768 ) 范围内的有符号整数读回。我为此选择的方法是将数字计算为有符号 16 位 int,立即将其转换为无符号 16 位 int,然后将其向上转换为 64 位无符号 int,然后执行适当的位移以获得将关键的 16 位放入正确的位置。

这是创建位打包排列的伪代码:

Given int x, y such that x - y >= -32768 and y - x < 32768;
const int MASK_POS = 45;
const unsigned short int u_s = x - y;
unsigned long long int ull_s = u_s;
ull_s <<= MASK_POS;
Run Code Online (Sandbox Code Playgroud)

这是提取原始数字差异的伪代码:

Given unsigned long long int ull_s with 16 bits encoding a signed integer in the 46th …
Run Code Online (Sandbox Code Playgroud)

c++ signed bit-manipulation unsigned-integer

7
推荐指数
1
解决办法
140
查看次数

System.Data.SQLite对System.Int32错误地键入了无符号的int字段

使用System.Data.SQLite,我正在创建一个包含无符号整数列的表:

@"CREATE TABLE widgets (" +
    @"id unsigned integer(10) PRIMARY KEY, " +
    @"fkey unsigned integer(10), " + ...
Run Code Online (Sandbox Code Playgroud)

然后插入像这样的值

INSERT INTO widgets (id, fkey, ...) VALUES (4294967295, 3456, ...
Run Code Online (Sandbox Code Playgroud)

但是,循环遍历此表的行和列,我发现它row["id"]具有类型System.Int32(而不是UInt32),并且毫不奇怪,4294967295被解释为-1.实际上,表中的所有unsigned int字段(不仅主键id被错误地键入System.Int32)

同时,SQLite类型规范说整数存储在1,2,3,4,6或8个字节中,具体取决于值的大小.4294967295 = 0xFFFFFFFF只适合四个字节.它似乎与SQLite的所谓"动态类型"不一致.当我插入大于4294967295的正值时,类型仍然存在System.Int32.

这是一个错误还是一个功能?

PS1:

我的表包含1行,列id = 2 ^ 32-1 = 4294967295(或更大),我打印所有列的类型

public void PrintDataTypes(DataTable dt) {
    foreach (DataRow row in dt.Rows) {
        foreach (DataColumn col in dt.Columns)
            Console.WriteLine("name={0}, type={1}", 
                               col.ToString(),
                               row[col].GetType().ToString());
        return; // after 1st …
Run Code Online (Sandbox Code Playgroud)

c# sqlite unsigned-integer

6
推荐指数
1
解决办法
946
查看次数

浮点单调性质

我正在读一本书.在书中写道 -

浮点加法满足以下单调特性:
如果a>=b(x + a) >= (x+b)对任何价值a,bx其他比NaN.无符号或二进制补码的加法不符合实数(和整数)加法的这一性质.

浮点如何服从它?
为什么无符号或两个补码不符合它?

c floating-point twos-complement unsigned-integer real-number

6
推荐指数
1
解决办法
243
查看次数

用于指定任何无符号整数类型的 C++ 模板特征

I\xe2\x80\x99m 尝试实现一个仅接受无符号整数类型的函数。以下是我迄今为止尝试过的。它适用于“unsigned int”,但为什么 \xe2\x80\x99t 不能编译为“unsigned Short”?

\n\n
#include <iostream>\n#include <type_traits>\n\ntemplate<typename T, class = typename std::enable_if<std::is_unsigned<T>::value>::type>\ninline const T oddProduct(T n) noexcept {\n    return (n <= 1) ? n : (n % 2) ? oddProduct(n - 2)*n : oddProduct(--n);\n}\n\nint main() {\n    std::cout << "Product of odd integers from 1 to 15: " << oddProduct<unsigned short>(15) << std::endl;\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:MSVS 2017 社区 C++14 选项。

\n

c++ templates traits unsigned-integer

6
推荐指数
1
解决办法
3695
查看次数

var如何适用于数字?

我今天试验了编译器如何确定声明为的数字的类型var.

var a = 255; //Type = int. Value = byte.MaxValue. Why isn't this byte?
var b = 32767; //Type = int. Value = short.MaxValue. Why isn't this short?
var c = 2147483647; //Type = int. Value = int.MaxValue. int as expected.
var d = 2147483648; //Type = uint. Value = int.MaxValue + 1. uint is fine but could have been long?
var e = 4294967296; //Type = long. Value = uint.MaxValue + 1. Type is long as …
Run Code Online (Sandbox Code Playgroud)

c# types integer unsigned-integer

6
推荐指数
1
解决办法
108
查看次数

如何从 Kotlin JVM 的字节数组中获取无符号整数?

Kotlin 1.3 引入了无符号整数类型,但我似乎无法弄清楚如何从ByteArrayKotlin JVM 中的a 获取无符号整数。

Kotlin Native 有一个方便的ByteArray.getUIntAt()方法,但是 Kotlin JVM 不存在这个方法。

val bytes: ByteArray = byteArrayOf(1, 1, 1, 1)
val uint: UInt // = ???
Run Code Online (Sandbox Code Playgroud)

我在这里有哪些选择?有没有比使用 aByteBuffer或位移位更优雅的方法呢?

arrays byte jvm unsigned-integer kotlin

6
推荐指数
1
解决办法
5193
查看次数

C++ 无符号和有符号转换

我以前见过这种问题,但提供的答案并没有让我明白一切。发布此问题时,通常会附上下一个示例:

#include <iostream>

int main()
{
    unsigned int u = 10;
             int i = -42;

    std::cout << i + i << std::endl;
    std::cout << i + u << std::endl;

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

输出:

-84
4294967264
Run Code Online (Sandbox Code Playgroud)

所有按预期工作 int 转换为无符号。但是,如果 的绝对值i小于 ,u则似乎没有发生这种转换。

#include <iostream>

int main()
{
    unsigned int u = 10;
             int i = -3;

    std::cout << i + i << std::endl;
    std::cout << i + u << std::endl;

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

输出:

-6
7
Run Code Online (Sandbox Code Playgroud)

我没有看到任何提到它的答案,也找不到任何解释。尽管这似乎是合乎逻辑的事情发生,但我对此没有任何解释。

c++ unsigned-integer

6
推荐指数
2
解决办法
150
查看次数