我所知道的unsigned数字(unsigned short,int和longs),它只包含正数,但是下面的简单程序成功地将一个负数分配给unsigned int:
1 /*
2 * =====================================================================================
3 *
4 * Filename: prog4.c
5 *
6 * =====================================================================================
7 */
8
9 #include <stdio.h>
10
11 int main(void){
12
13 int v1 =0, v2=0;
14 unsigned int sum;
15
16 v1 = 10;
17 v2 = 20;
18
19 sum = v1 - v2;
20
21 printf("The subtraction of %i from %i is %i \n" , v1, v2, sum);
22
23 return 0;
24 }
Run Code Online (Sandbox Code Playgroud)
输出是:
The subtraction of …
我想打印4个字节的无符号整数的最大值.
#include "stdafx.h"
#include "conio.h"
int _tmain(int argc, _TCHAR* argv[])
{
unsigned int x = 0xffffffff;
printf("%d\n",x);
x=~x;
printf("%d",x);
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但我输出为-1和0.如何打印x = 4294967295?
我正在尝试使用数组保存rgba数据(0x00000000→0xFFFFFFFF),当我将值超过2,147,483,647溢出时,我假设因为某些可能的转换(可能是无符号→已签名).
这是我的代码:
int main(int argc, char* args[]) {
uint32_t *background = new uint32_t[1920*1080];
background[100] = 0xFF0000FF; //red, 4278190335
printf("%d, ", background[100]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
-16776961
Run Code Online (Sandbox Code Playgroud)
我仍然对C++有些新意,所以如果我忘记某些事情,请指出它.
请参阅下面的简单代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(void)
{
unsigned long currentTrafficTypeValueDec;
long input;
input=63;
currentTrafficTypeValueDec = (unsigned long) 1LL << input;
cout << currentTrafficTypeValueDec << endl;
printf("%u \n", currentTrafficTypeValueDec);
printf("%ld \n", currentTrafficTypeValueDec);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么printf()显示带负值的currentTrafficTypeValueDec(unsigned long)?
输出是:
9223372036854775808
0
-9223372036854775808
Run Code Online (Sandbox Code Playgroud) 有人可以解释为什么unsigned int取负值?一个unsigned int
应该只正值.
来自维基百科:
单词,长,双字,长字,整数
无符号:从0到4,294,967,295,等于2 ^ 32 - 1
#include <stdio.h>
typedef unsigned int uint32;
int main()
{
uint32 i;
int x = -1;
i = x%32;
printf("\n\n Value of uint32 i = %d", i);
return (0);
}
Run Code Online (Sandbox Code Playgroud)
Value of uint32 i = -1
Run Code Online (Sandbox Code Playgroud)
以下是我在cpp标准中找到的解释,我无法解释.
对于每个有符号整数类型,存在相应的(但不同的)无符号整数类型:"unsigned char","unsigned short int","unsigned int"和"unsigned long int",每个占用相同的量存储并具有与对应的有符号整数类型40相同的对齐要求(3.9); 也就是说,每个有符号整数类型具有与其对应的无符号整数类型相同的对象表示.有符号整数类型的非负值范围是相应无符号整数类型的子范围,每个对应的有符号/无符号类型的值表示应相同.
4无符号整数,声明无符号整数,应遵守算术模2n的定律,其中n是整数特定大小的值表示中的位数
40)关于类型之间的对应关系以及指定它们的类型说明符序列,请参见7.1.5.2.
41)这意味着无符号算术不会溢出,因为无法由结果无符号整数类型表示的结果以比模式生成的无符号整数类型所表示的最大值大1的数量减少.