我有一个包含值0,1,2和3的向量.我想要做的是从每个从这个向量中提取的16个元素集合中取下两位,并将它们全部附加在一起得到一个uint32.有人知道一个简单的方法吗?
后续:如果向量中的元素数不是16的整数倍,该怎么办?
matlab bit-manipulation vector data-conversion unsigned-integer
对不起,这是一个非常愚蠢的问题,只是查看我的操作系统课程的旧试卷,并注意到这个问题可以经常出现.如何解决这个问题?我真的不明白.
另一个问题是:
可以用7位,9位和10位表示的最大和最小无符号整数是多少?
有人能告诉我你将如何解决这个问题吗?它只是2 ^ 7吗?
非常感谢 !:)
我在一些GL代码中传递一个顶点索引数组...每个元素都是一个GLushort
我希望用一个标记终止,以避免每次与数组本身一起费力地传递数组长度.
#define SENTINEL ( (GLushort) -1 ) // edit thanks to answers below
:
GLushort verts = {0, 0, 2, 1, 0, 0, SENTINEL};
Run Code Online (Sandbox Code Playgroud)
我不能使用0来终止,因为一些元素的值为0
我可以使用-1吗?
根据我的理解,这将包装到GLushort可以表示的最大整数,这将是理想的.
但这种行为在C中是否得到保证?
(我找不到这种类型的MAX_INT等效常量,否则我会使用它)
我有一个未定义的int值为-10,现在我想将其转换为NSString.
简单地说,我们在objective-c中进行iphone编程
int x = 10;
NSString *str = [NSString stringWithFormat:@"%d",x];
NSLog(@"My String is %@",str);
Run Code Online (Sandbox Code Playgroud)
我将控制台输出显示为10
但如果是这样的话
unsigned int x = -10;
NSString *str = [NSString stringWithFormat:@"%d",x];
NSLog(@"My String is %@",str);
Run Code Online (Sandbox Code Playgroud)
然后输出将是相同的,而不是-10,
我怎样才能进行适当的转换?
#include <iostream>
int main ()
{
using namespace std;
unsigned int i = 4;
int a = -40;
cout<<a+i<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
执行这个给了我4294967260
我知道有一个转换发生,从signed int到unsigned int,但是这个特殊值的方式和原因是什么?我注意到它接近于|的总和 2147483647 | + 2147483647
我有以下功能:
void func(unsigned long v)
{
char max_byte = 0xFF;
char buffer[8];
buffer[0] = static_cast<char>((v) & max_byte);
buffer[1] = static_cast<char>((v >> 8) & max_byte);
buffer[2] = static_cast<char>((v >> 16) & max_byte);
buffer[3] = static_cast<char>((v >> 24) & max_byte);
buffer[4] = static_cast<char>((v >> 32) & max_byte);
buffer[5] = static_cast<char>((v >> 40) & max_byte);
buffer[6] = static_cast<char>((v >> 48) & max_byte);
buffer[7] = static_cast<char>((v >> 56) & max_byte);
}
Run Code Online (Sandbox Code Playgroud)
它接受一个unsigned long参数并将其8个字节插入char缓冲区(不要试图找出原因.它是一个有意义的函数的简洁版本).
此代码在64位上编译良好,但在32位上我得到以下警告:
warning: right shift count >= width …Run Code Online (Sandbox Code Playgroud) 编译时,此代码没有给出警告g++:
unsigned int myFunc(unsigned int integer) {
return integer;
}
int main() {
int x = -1;
std::cout << myFunc(x) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它编译得很好,但结果是错误的:4294967295.GCC有没有任何编译器-W*选项?
这是我的实现,用于检测在尝试添加两个数字时是否发生了无符号的int溢出.
我系统上unsigned int(UINT_MAX)的最大值是4294967295.
int check_addition_overflow(unsigned int a, unsigned int b) {
if (a > 0 && b > (UINT_MAX - a)) {
printf("overflow has occured\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这似乎适用于我尝试过的价值观.
任何流氓案件?您认为利弊是什么?
我写下面的代码:
#include <iostream>
using namespace std;
int main() {
unsigned int i=1;
i=i-3;
cout<<i;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是垃圾值,这是可以理解的.
现在我写下面的代码:
#include <iostream>
using namespace std;
int main() {
unsigned int i=1;
i=i-3;
i=i+5;
cout<<i;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在输出是3.这里发生了什么?如何在这里添加垃圾值5?
#include <stdio.h>
int main() {
unsigned int a = -10;
printf("a=%d\n", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是打印-10签名int.如果签名和未签名都打印,-10那么它们之间有什么区别?