Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于在字符中放置小整数的C++信息 我看到C++中有很多代码,它们用字符表示更小的数字。 超过256_C++_Char - Fatal编程技术网

关于在字符中放置小整数的C++信息 我看到C++中有很多代码,它们用字符表示更小的数字。 超过256

关于在字符中放置小整数的C++信息 我看到C++中有很多代码,它们用字符表示更小的数字。 超过256,c++,char,C++,Char,这些字符应该是无符号字符而不是字符吗 如果我这样做会怎么样 char t = 255; 我记得我在某个地方读到过,说char是符号的特殊之处 char是一种不同于有符号和无符号版本的类型,可以是有符号的或无符号的。如果您想要一个特定的有符号或无符号字节/字符,您确实应该在变量声明中指定它。字符是一种不同于有符号和无符号版本的类型,可以是有符号或无符号的。如果你想要一个特殊的签名或无符号字节/ char,你应该在变量声明中指定它。 < P>是的,字符可以是签名的或未签名的[Basic,Basic

这些字符应该是无符号字符而不是字符吗

如果我这样做会怎么样

char t = 255;
我记得我在某个地方读到过,说char是符号的特殊之处

char是一种不同于有符号和无符号版本的类型,可以是有符号的或无符号的。如果您想要一个特定的有符号或无符号字节/字符,您确实应该在变量声明中指定它。

字符是一种不同于有符号和无符号版本的类型,可以是有符号或无符号的。如果你想要一个特殊的签名或无符号字节/ char,你应该在变量声明中指定它。

< P>是的,字符可以是签名的或未签名的[Basic,Basic ],它是由编译器C++实现来选择*。如果它是有符号的,则不能保证它可以保存值255,如果它不能保存值255,则转换将导致实现定义的值[conv.integral]

由于无符号字符保证至少有8位以及字符和有符号字符,因此行无符号字符t=255;很好

*这并不意味着typedef signed char;,作为char、符号char和unchar字符需要三种不同类型[Basic .Nask],1。

< P>是的,CHAR可以是签名的或无符号的[Basic,Basic ],它是由编译器C++实现来选择*的。如果它是有符号的,则不能保证它可以保存值255,如果它不能保存值255,则转换将导致实现定义的值[conv.integral]

由于无符号字符保证至少有8位以及字符和有符号字符,因此行无符号字符t=255;很好


*这并不意味着typedef signed char;,由于char、signed char和unsigned char必须是三种不同的类型[basic.basical]/1。

严格来说,这取决于所讨论的目标的char中有多少位。您是对的,对于具有有符号8位字符类型的普通2的补码机器,它们可能应该使用无符号字符

从一个符号到无符号的转换,应该发生,根据C++规范4.7积分转换: 2如果目标类型是无符号的,则结果值是与源整数模2n全等的最小无符号整数,其中n是用于表示无符号类型的位数。[注:在2的补码表示中,这种转换是概念性的,如果没有截断,则位模式不会改变。-尾注]

但是,从无符号到有符号的转换是由实现定义的:

3如果目标类型是有符号的,如果可以在目标类型和位字段宽度中表示,则该值不变;否则,该值由实现定义


但在实践中,大多数系统都按照您预期的方式工作,一切正常。也就是说,有符号溢出的工作原理与无符号溢出类似,无论有符号->无符号或无符号->有符号转换等,位模式都不会改变。

严格来说,这取决于所讨论的目标的字符中有多少位。您是对的,对于具有有符号8位字符类型的普通2的补码机器,它们可能应该使用无符号字符

从一个符号到无符号的转换,应该发生,根据C++规范4.7积分转换: 2如果目标类型是无符号的,则结果值是与源整数模2n全等的最小无符号整数,其中n是用于表示无符号类型的位数。[注:在2的补码表示中,这种转换是概念性的,如果没有截断,则位模式不会改变。-尾注]

但是,从无符号到有符号的转换是由实现定义的:

3如果目标类型是有符号的,如果可以在目标类型和位字段宽度中表示,则该值不变;否则,该值由实现定义


但在实践中,大多数系统都按照您预期的方式工作,一切正常。也就是说,有符号溢出的工作原理与无符号溢出类似,无论有符号->无符号或无符号->有符号转换等,位模式都不会改变。

标准没有指定纯“char”是有符号还是无符号。这由编译器决定。在GCC中,默认情况下它是有符号的,但可以用-funsigned char/-fsigned char指定,同样在MSVC中,默认值是有符号的,但可以强制用/J取消签名。

标准没有指定普通的“char”是有符号的还是无符号的。这由编译器决定。在GCC中,默认情况下会对其进行签名,但可以使用-funsigned char/-fsigned char指定,同样,在MSVC中,默认情况下会进行签名,但可以强制使用/J取消签名。

M
可能有用:是的,不能保证它是否合适。Dupe:什么是无符号字符,它与字符有什么不同:可能有用:是的,不能保证它是否合适。Dupe:什么是无符号字符,它与字符有什么不同:它不正确。gcc将根据目标体系结构/abi将字符默认为有符号或无符号。在大多数情况下,它将被签署。在其他情况下,如大多数Unice上的ppc,它将是未签名的。这是不正确的。gcc将根据目标体系结构/abi将字符默认为有符号或无符号。在大多数情况下,它将被签署。在其他情况下,如大多数Unice上的ppc,它将是未签名的。