如何将unsigned int转换为jint?我是否必须完全转换它,或者我可以在没有任何特殊处理的情况下退回它?这基本上是我的代码,但我无法测试它,因为我没有在本地设置JNI.
JNIEXPORT jint JNICALL
Java_test_test(JNIEnv* env, jobject obj, jlong ptr)
{
MyObject* m = (MyObject*) ptr;
unsigned int i = m->get();
return i;
}
Run Code Online (Sandbox Code Playgroud) 我试图65529从一个转换unsigned int为签名int.我尝试做这样的演员:
unsigned int x = 65529;
int y = (int) x;
Run Code Online (Sandbox Code Playgroud)
但是y当它应该返回-7时仍然返回65529.这是为什么?
这是一个我坚持的功课问题.
考虑无符号整数表示.存储包含以下内容的十进制数需要多少位:
i) 3 digits ii) 4 digits iii) 6 digits iv) n digits
Run Code Online (Sandbox Code Playgroud)
我知道无符号整数的范围是0到2 ^ n,但我不知道表示数字所需的位数如何取决于它.请帮帮我.
提前致谢.
unsigned int当我溢出它时会包含什么?具体来说,我想用两个unsigned ints 进行乘法:unsigned int乘法结束后会有什么?
unsigned int someint = 253473829*13482018273;
Run Code Online (Sandbox Code Playgroud) 我正在使用sqlite.org上提供的sqlite3库.
我有一些我想要存储在数据库中的unsigned longs.我不想自己构建查询并将其保持开放以进行某种注入(无论是否是偶然的).因此,我正在使用这些sqlite_bind_*函数来"清理"我的参数.
问题是对于无符号长整数,只有整数没有函数类型.
int sqlite3_bind_int(sqlite3_stmt*, int, int);
int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);
如果我无法以无符号方式存储它们,我肯定会有数字会溢出.
我自己需要自己管理吗?(即在插入数据库之前从db中选择或转换为signed类型后转换为无符号类型)
如果我自己必须自己管理,当比较真的意味着在无符号范围内时,如何做一些存储为有符号长整数的比较查询?
查看转换后的INTEGER数据类型,可以认为无符号长整数可以毫无问题地表示.
如果有其他可用解决方案,请赐教!谢谢!
我有一个无符号的int数(2字节),我想将其转换为unsigned char类型.从我的搜索中,我发现大多数人建议您执行以下操作:
unsigned int x;
...
unsigned char ch = (unsigned char)x;
Run Code Online (Sandbox Code Playgroud)
是正确的方法吗?我问,因为unsigned char是1个字节,我们从2字节数据转换为1个字节.
为了防止任何数据丢失,我想创建一个unsigned char []数组并将各个字节保存到数组中.我被困在以下方面:
unsigned char ch[2];
unsigned int num = 272;
for(i=0; i<2; i++){
// how should the individual bytes from num be saved in ch[0] and ch[1] ??
}
Run Code Online (Sandbox Code Playgroud)
另外,我们如何将unsigned char [2]转换回unsigned int.
非常感谢.
我理解,对于隐式转换,如果我们有无符号类型操作数和带符号类型操作数,并且无符号操作数的类型与带符号操作数的类型相同(或更大),则将转换带符号操作数未签名.
所以:
unsigned int u = 10;
signed int s = -8;
std::cout << s + u << std::endl;
//prints 2 because it will convert `s` to `unsigned int`, now `s` has the value
//4294967288, then it will add `u` to it, which is an out-of-range value, so,
//in my machine, `4294967298 % 4294967296 = 2`
Run Code Online (Sandbox Code Playgroud)
我不明白 - 我读到如果签名操作数的类型比无符号操作数大:
如果无符号类型中的所有值都适合较大的类型,则无符号操作数将转换为有符号类型
如果无符号类型中的值不适合较大的类型,则带符号的操作数将转换为无符号类型
所以在以下代码中:
signed long long s = -8;
unsigned int u = 10;
std::cout << s + u << std::endl; …Run Code Online (Sandbox Code Playgroud) 我需要使用C.我的意思是产生的随机的64位无符号整数,范围应该0以18446744073709551615.RAND_MAX是1073741823.
我在链接中找到了一些可能重复的解决方案,但答案主要是连接一些rand()结果或进行一些增量算术运算.所以结果总是18位或20位.我也希望像成果5,11,33387,不只是3771778641802345472.
顺便说一句,我真的没有这么多的C经验,但任何方法,代码样本和想法都可能是有益的.
我有一个简单的程序.请注意,我使用的是无符号的固定宽度整数1字节.
#include <cstdint>
#include <iostream>
#include <limits>
int main()
{
uint8_t x = 12;
std::cout << (x << 1) << '\n';
std::cout << ~x;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的输出如下.
24
-13
Run Code Online (Sandbox Code Playgroud)
我测试了更大的数字,操作员<<总是给我正数,而操作员~总是给我负数.我然后使用sizeof()并发现......
当我使用左移位运算符(
<<)时,我收到一个无符号的4字节整数.当我使用bitwise not运算符(
~)时,我收到一个带符号的4字节整数.
似乎bitwise not运算符(~)像算术运算符一样执行有符号整数提升.但是,左移运算符(<<)似乎提升为无符号整数.
我觉得有必要知道编译器什么时候改变我背后的东西.如果我在分析中是正确的,那么所有按位运算符都会提升为4字节整数吗?为什么一些签名和一些未签名?我很困惑!
编辑:我总是得到肯定或总是得到负值的假设是错误的.但是由于错误,我理解真正发生的事情,这要归功于下面的重要答案.
c++ bitwise-operators integer-promotion unsigned-integer signed-integer
我刚刚遇到一种情况,其中无符号整数本来就非常有用(例如,任何负值都没有意义等等).令人惊讶的是,我发现Kotlin不支持无符号整数 - 并且似乎没有其他任何关于为什么(即使我看过).
我错过了什么吗?