C++ 数字截断

C++ 数字截断,c++,C++,我正在检查以下代码。它基本上会截断通过cin对象输入的字符的数字。问题是我不知道如何将int值赋给character对象会截断除第一个以外的数字 #include <iostream> using namespace std; int main(){ unsigned int integer; unsigned char character; cin >> integer; character = integer; cout <

我正在检查以下代码。它基本上会截断通过cin对象输入的字符的数字。问题是我不知道如何将int值赋给character对象会截断除第一个以外的数字

#include <iostream>
using namespace std;
int main(){
    unsigned int integer;
    unsigned char character;
    cin >> integer;
    character = integer;
    cout << character ;
}
#包括
使用名称空间std;
int main(){
无符号整数;
无符号字符;
cin>>整数;
字符=整数;
库特
问题是我不知道如何将int值赋给character对象会截断除第一个以外的数字

为了便于说明,让我们假设
char
是无符号的,宽8位,
int
是32位。这样的赋值将去掉顶部的24位,留下底部的8位

截断与整数的小数位数无关。例如,
9999
将变成
15
(因为
9999&0xFF==15

问题是我不知道如何将int值赋给character对象会截断除第一个以外的数字

为了便于说明,让我们假设
char
是无符号的,宽8位,
int
是32位。这样的赋值将去掉顶部的24位,留下底部的8位


截断与整数的小数位数没有任何关系。例如,
9999
将变成
15
(因为
9999&0xFF==15
)。

我不确定您所说的“除第一个之外”是什么意思。但让我看看是否可以解释发生了什么


unsigned char
我相信,标准要求长度为1字节。
int
通常更长,4字节是典型的。因此,当您输入一个数字>255时,它会丢失上面的所有值,因为它只能保存一个字节,并且前导的3个字节的数据丢失。

我不确定您的意思“除了第一个。”但让我看看是否能解释发生了什么


unsigned char
我认为,标准要求长度为1字节。
int
通常更长,通常为4字节。因此,当您输入一个数字>255时,它会释放所有高于该值的值,因为它所能容纳的只有一个字节,并且前导的3个字节的数据丢失。

实际上,“如果目标类型是有符号的,[…]该值由实现定义。"。请记住,
char
可能是一种有符号类型。@KerrekSB:我希望有这样的注释。:)我添加了另一个假设,以尝试说明发生了什么,而不会使事情变得太复杂。@NPE这意味着将无符号int赋值给无符号char相当于输入值与0xFF的二进制anding?我的意思是在t中他是那种情况。@SumitGera:一句话,是的。实际上,“如果目标类型是有符号的,[…]值是实现定义的。”。请记住,
char
可能是一种有符号类型。@KerrekSB:我希望有这样的注释。:)我添加了另一个假设,以尝试说明发生了什么,而不会使事情变得太复杂。@NPE这意味着将无符号int赋值给无符号char相当于输入值与0xFF的二进制anding?我的意思是在t中“他是那种情况。”苏米特格拉:一句话,是的。