标签: unsigned

C:在无符号变量的情况下执行带符号变量的签名比较

我想要一个具有以下签名的函数:

bool signed_a_greater_than_signed_b(unsigned char a, unsigned char b);
Run Code Online (Sandbox Code Playgroud)

它的输出应该是1iff存储的位a的2的补码视图大于存储的位的2的补码视图b.否则输出应该是0.例如:

signed_a_greater_than_signed_b(0b10000000,any number) => 0
signed_a_greater_than_signed_b(0b01111111,any number other than 0b01111111) => 1
signed_a_greater_than_signed_b(0b00000000,0b00000001) => 0
signed_a_greater_than_signed_b(0b00000000,0b11111111) => 1
signed_a_greater_than_signed_b(0b00000000,0b00000000) => 0
Run Code Online (Sandbox Code Playgroud)

该函数不具有任何隐式/显式转换(因为这些转换是实现定义的,因此不可移植)

一个这样的实现是:

bool signed_a_greater_than_signed_b(unsigned char a, unsigned char b)
{
    // if 'signed' a is positive then 
    //     return 1 if a is greater than b or b is negative
    // otherwise, if 'signed' a is negative then 
    //     return 1 …
Run Code Online (Sandbox Code Playgroud)

c comparison unsigned signed casting

0
推荐指数
1
解决办法
856
查看次数

UINT_MAX与C中的ULONG_MAX相同

在解决K&R C书中的练习时,我偶然发现了练习2.1.

起初,我为UINT_MAX作为-1,但后来我用的%u占位符,但现在它让我有相同的号码ULONG_MAX.

在这本书的附录B,他们说,UINT_MAX应该是65535ULONG_MAX4294967295,但在运行时的运动,它的给我两个UINT_MAXULONG_MAX作为4294967295.

这是为什么?

c unsigned kr-c max long-integer

0
推荐指数
1
解决办法
6941
查看次数

无符号长长的算术

我想将两个相乘,unsigned integers但我希望结果存在于一个unsigned long long变量中

unsigned long long M;
unsigned int X;
unsigned int Y;

X = 999999;
Y = 9990;
M = X * Y;
Run Code Online (Sandbox Code Playgroud)

M应该9989990010但由于某种原因它一直存在1400055418

我已经困扰了一个星期了,我想我已经到了想哭的地步!

c++ unsigned visual-c++ long-integer

0
推荐指数
1
解决办法
1950
查看次数

如何将unsigned char数组传递给C++中的函数?

void GetKey(int date, unsigned char[] key)
{

}
Run Code Online (Sandbox Code Playgroud)

我试图传递unsigned char数组ta函数,但我得到一个错误"expected a')'"where"key"变量是.

c++ arrays unsigned char

0
推荐指数
1
解决办法
2206
查看次数

有符号整数中的INT_MAX + 1 = INT_MIN吗?

for (i = 0; i <= N; ++i) { ... }
Run Code Online (Sandbox Code Playgroud)

如果N为,则该特定语句将导致无限循环INT_MAX.已经知道无符号溢出正在包装溢出,假设iN无符号,编译器可以假设N+1如果i在溢出时未定义,则循环将完全迭代.这里需要注意的是:如果我将循环设为,

for (i = 0; i < N; ++i) { ... }
Run Code Online (Sandbox Code Playgroud)

这仍然是未定义的行为吗?

为什么在签名整数的情况下INT_MAX + 1肯定不相同INT_MIN

c unsigned signed

0
推荐指数
1
解决办法
3760
查看次数

在C中将字符串转换为unsigned long long int

如何将字符串转换为unsigned long long int?

问题是,如果我使用strtol它返回一个long int,但我需要转换一个比这更长的字符串.

c string unsigned

0
推荐指数
1
解决办法
7412
查看次数

安全地添加,减去无符号字符

假设一个有8个无符号字符x1,x2,...x8,我们想要计算:

abs((x1 + x2 + x3 + x4) - (x5 + x6 + x7 + x8)) / 4
Run Code Online (Sandbox Code Playgroud)

在不引入大量上溢或下溢错误的情况下,确保最准确结果的最佳方法是什么?

我在模板类中使用它,这就是为什么我不能将无符号值转换为有符号值.

c++ unsigned integer-arithmetic

0
推荐指数
1
解决办法
3020
查看次数

我在x中出现了多少次(无符号32位int C)

这对我来说有点混乱,但我必须看看我在x中出现了多少次.因此,如果有人为i输入3而x为4294967295,则应该说0次,但如果有人输入9表示i和4294967295表示x,则应该说3次.

这就是我所拥有的,但输出0表示为0,所以它不起作用..

int main(int argc, char** argv) {
    unsigned int i;
    scanf("%u", &i);
    unsigned int x;
    scanf("%u", &x);
    int output = 0;
    int t = 0;
    while (t < 10) {
        x /= 10;
        if (i == x) {
            output++;
        }
        t++;
    }
    printf("%d", output);
}
Run Code Online (Sandbox Code Playgroud)

c int unsigned sum

0
推荐指数
1
解决办法
76
查看次数

为什么在许多语言中默认签署int类型的变量?

int默认情况下,C,C++,C#,Java,Rust等已签名.大多数时候你需要无符号变量,因为你必须表示低于零的东西的情况比处理自然数的情况要少.无符号变量也不必以2的补码形式编码,并且对于额外的值范围,它们具有最高有效位.

考虑到所有这些因素,为什么语言创建者会默认签名?

c int unsigned signed programming-languages

0
推荐指数
1
解决办法
881
查看次数

如何在Java中将int数组转换为base64字符串?

我该如何转换这个数组:

int[] ints = { 233, 154, 24, 196, 40, 203, 56, 213, 242, 96, 133, 54, 120, 146, 46, 3 };
Run Code Online (Sandbox Code Playgroud)

到这个字符串?

String base64Encoded = "6ZoYxCjLONXyYIU2eJIuAw==";
Run Code Online (Sandbox Code Playgroud)

用法:

String base64Encoded  = ConvertToBase64(int[] ints);
Run Code Online (Sandbox Code Playgroud)

(我问这个问题,因为byte在Java中签名,但byte在C#中是无符号的)

java base64 unsigned

0
推荐指数
1
解决办法
1826
查看次数