标签: unsigned-integer

Unsigned Int 的最大值是 -1

我试图找出无符号数据类型的最小值和最大值。我知道最小无符号值是 0,最大值是 (2^n)-1。但是,当我尝试运行我的程序时(我无法发布我的代码,但您可以参考),我一直将 -1 作为最大值。有人可以向我解释为什么吗?另外,UINT_MAX 给我 4294967295,而 ULLONG_MAX 是 4294967295。但是,unsigned int 的最大值应该是 65535,而 unsigned long long int 应该是 +18,446,744,073,709,551,615。为什么输出不同?

c unsigned types unsigned-long-long-int unsigned-integer

-1
推荐指数
1
解决办法
3098
查看次数

为什么将无符号转换为直接用C签名会得到正确的结果?

在C中,有符号整数和无符号整数在内存中的存储方式不同.当类型在运行时清除时,C还隐式转换有符号整数和无符号整数.但是,当我尝试以下代码段时,

#include <stdio.h>

int main() {    
    unsigned int a = 5;
    signed int b = a;
    signed int c = *(unsigned int*)&a;
    signed int d = *(signed int*)&a;

    printf("%u\n", a);
    printf("%i\n", b);
    printf("%i\n", c);
    printf("%i\n", d);

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

预期产量:

5
5                   //Implicit conversion occurs
5                   //Implicit conversion occurs, because it knows that *(unsigned int*)&a is an unsigned int
[some crazy number] //a is casted directly to signed int without conversion
Run Code Online (Sandbox Code Playgroud)

然而,实际上,它输出

5
5
5
5
Run Code Online (Sandbox Code Playgroud)

为什么?

c c++ unsigned-integer

-1
推荐指数
1
解决办法
107
查看次数

如何在C中使用内存地址?它们是十六进制还是无符号整数?

我正在学习C,最近我的课程指针和内存地址.老师告诉我们,内存位置基本上是无符号数字,因此我们可以使用以下代码显示它们:

int a;
printf("%u", &a);
Run Code Online (Sandbox Code Playgroud)

要么

int a, *p=&a;
printf("%u", p);
Run Code Online (Sandbox Code Playgroud)

事实上,这是有效的,但我也在一些论坛中读到,应该使用%p或%x来打印地址.所以,它们必须是十六进制数...我上面看到的整数实际上是十六进制数转换为十进制吗?实际上它们的基本形式是什么地址 - 十六进制或整数或简单的二进制数.

请帮帮我.

c c++ memory pointers unsigned-integer

-2
推荐指数
1
解决办法
1434
查看次数

无符号长长斐波那契数为负数?

我写了一个简单的Fibonacci序列生成器,看起来像:

#include <iostream>

void print(int c, int r) {
    std::cout << c << "\t\t" << r << std::endl;
}

int main() {
    unsigned long long int a = 0, b = 1, c = 1;
    for (int r = 1; r <= 1e3; r += 1) {
        print(c, r);
        a = b;
        b = c;
        c = a + b;
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,当r价值达到40左右时,奇怪的事情开始发生.c尽管他是一个unsigned整数,但它的价值在负面和正面之间振荡,当然斐波纳契序列不可能就是这样.

这是怎么回事用unsigned long long整数?

是否c得到过大,即使是long long整数?

c++ unsigned-integer negative-integer

-2
推荐指数
1
解决办法
476
查看次数

将unsigned int添加到unsigned int*

我的开发环境包含用于ARM OMAP Sitata的g ++交叉编译器.当向unsigned int*添加unsigned int时,我发现了一个简单的指针算法的不寻常的细微差别,如下所示:

unsigned int* dst_base_addr;
unsigned int* dst_addr; 
unsigned int dst_offset;
Run Code Online (Sandbox Code Playgroud)

只是尝试将(unsigned int)添加到(unsigned int*)

dst_addr = dst_base_addr + dst_offset;
Run Code Online (Sandbox Code Playgroud)

上述内容并未被解释为人们可能会天真地想到,但实际上会产生以下等效结果

dst_addr = (unsigned int*)((unsigned int)dst_base_addr + (dst_offset << 2));
Run Code Online (Sandbox Code Playgroud)

补救当然是按照以下方式进行适当的类型转换

dst_addr = (unsigned int*)((unsigned int)dst_base_addr + dst_offset);
Run Code Online (Sandbox Code Playgroud)

问题:为什么在这种情况下甚至需要正确的类型转换?

c c++ pointer-arithmetic unsigned-integer

-2
推荐指数
1
解决办法
333
查看次数

C:unsigned int上的模运算符给出了意外的输出

#include <stdio.h>

main() {
    unsigned a = -20;
    unsigned b = 10;
    printf("%d\n", (a % b));
    printf("%d\n", (-20 % 10));
}

Output:
6
0
Run Code Online (Sandbox Code Playgroud)

第二个printf打印预期值0,而第一个printf打印6.为什么这个意外输出带有无符号整数?

c unsigned modulus unsigned-integer

-3
推荐指数
1
解决办法
1388
查看次数

使用16位无符号整数(uint16_t)

我想生成一个16位无符号整数(uint16_t),它可以表示如下:

  1. 前2位数代表某些版本,如1,2,3等.
  2. 代表另一个数字的下三个数字可以是123,345,071等.
  3. 最后11位代表数字T234,T566等.

我们如何使用目标C来做到这一点.我想稍后解析这些数据以获取这些组件.请指教.

cocoa-touch objective-c unsigned-integer ios

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