C中的类型转换(降级)

时间:2018-04-11 12:22:57

标签: c type-conversion

有人可以解释一下:"当目的地是某种形式的无符号整数并且赋值是一个整数时,会忽略使该值太大的额外位。"我没有得到什么"目的地类型"和指定值均值。

3 个答案:

答案 0 :(得分:1)

"目的地"是指分配给变量的变量,即分配的左侧,而分配的值是#34;表示分配给变量的值,即右侧。

例如:

unsigned int destination = assigned_value;

当指定的值超出目标范围时会发生什么情况,C standard关于有符号和无符号整数转换的第6.3.1.3节说明如下:

  

1 当整数类型的值转换为_Bool以外的另一个整数类型时,如果该值可以由new表示   类型,它没有变化。

     

2 否则,如果新类型是无符号的,则通过重复加或减一个最大值来转换该值   可以用新类型表示,直到值在   新类型的范围。

这实际上意味着该值以目标可以容纳的最大值加1转换。换句话说,额外的位被剥离。

答案 1 :(得分:0)

一个例子:

#!/usr/bin/env python
import os
import sys

if __name__ == '__main__':
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', '{{ project_name }}.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)

int assign = -2; unsigned int dest = 2; dest = assign ; 指令中,dest = assigndest类型的目的地,unsigned int是指定类型assign的值。

请小心这样做,因为程序结束时32位架构上的int

答案 2 :(得分:0)

我认为这句话应该是这样的:

 unsigned int destination = 258;
 \----------/               \-/
destination type          assigned value

二进制258是

1.0000.0010 (requires 9 bits)

但是无符号字符可以(通常)仅保持8位,因此仅使用最右边的8位,并忽略剩余的“额外”位。因此,unsigned char的二进制模式变为:

0000.0010

这是十进制值2。