在C语言中,“?”。“:”是什么意思?

来自:    更新日期:早些时候
在C语言中<<是什么意思?~

先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如:

int i = 1;
i = i << 2; //把i里的值左移2位

也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适用,因为左移有可能导致符号变化,下面解释原因)

需要注意的一个问题是int类型最左端的符号位和移位移出去的情况.我们知道,int是有符号的整形数,最左端的1位是符号位,即0正1负,那么移位的时候就会出现溢出,例如:

int i = 0x40000000; //16进制的40000000,为2进制的01000000...0000
i = i << 1;

那么,i在左移1位之后就会变成0x80000000,也就是2进制的100000...0000,符号位被置1,其他位全是0,变成了int类型所能表示的最小值,32位的int这个值是-2147483648,溢出.如果再接着把i左移1位会出现什么情况呢?在C语言中采用了丢弃最高位的处理方法,丢弃了1之后,i的值变成了0.

左移里一个比较特殊的情况是当左移的位数超过该数值类型的最大位数时,编译器会用左移的位数去模类型的最大位数,然后按余数进行移位,如:

int i = 1, j = 0x80000000; //设int为32位
i = i << 33; // 33 % 32 = 1 左移1位,i变成2
j = j << 33; // 33 % 32 = 1 左移1位,j变成0,最高位被丢弃

在用gcc编译这段程序的时候编译器会给出一个warning,说左移位数>=类型长度.那么实际上i,j移动的就是1位,也就是33%32后的余数.在gcc下是这个规则,别的编译器是不是都一样现在还不清楚.

总之左移就是: 丢弃最高位,0补最低位

再说右移,明白了左移的道理,那么右移就比较好理解了.

右移的概念和左移相反,就是往右边挪动若干位,运算符是>>.

右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:

int i = 0x80000000;
i = i >> 1; //i的值不会变成0x40000000,而会变成0xc0000000

就是说,符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.

负数10100110 >>5(假设字长为8位),则得到的是 11111101

总之,在C中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多.

例:C语言中左移>表示除以2,这是由计算机工作原理导致的!但是要是7,二进制数为0111,右移一位得3.5,但是右移之后二进制数变成0011,是3。不一样啊,怎模解释呢??

答:移位操作符的两个操作数必须是整型的。整个移位表达式的值的类型也是整型的,而且,左移位操作符与右移位操作符的运算并不对称。0111右移一位是把最后一位的1去掉,左边补个0,得0011,转换为十进制是3,这是正确的。并不等同于除以2 。

1、意思:是条件运算符,条件运算符是C语言中唯一的三目运算符,就是说他有三个运算对象。

2、条件运算符的形式是“?:”由他构成的表达式称为条件表达式。形式为:表达式1?表达式2:表达式3。

运算符

表达式为:表达式1?表达式2:表达式3

先求解表达式1

若其值为真(非0)则将表达式2的值作为整个表达式的取值,

否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。

例如:max=(a>b)?a:b

就是将a和b二者中较大的一个赋给max。

以上内容参考:百度百科-条件运算符



?在语言中表示疑问,那么疑问来自于判断。

:在语言中表示判断的结果选择。

所以编程逻辑就是先进行判断,然后再进行选择。

例如,当a>b时,x=1否则x=0,可以写成x=a>b?1:0。

扩展资料: 

C语言运算符号:

比较特别的是,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补 0)位移。例如,将 11100011 右移 3 比特,算术右移后成为 11111100,逻辑右移则为 00011100。

因算术比特右移较适于处理带负号整数,所以几乎所有的编译器都是算术比特右移。

运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符(=)和逗号运算符。

关系运算符号 :== 、!=



这两个符号可以连成一个三目运算符,可以用于比较两个数的大小。如(a>b)?a:b表示若a比b大,则选a,否则选b

这是C语言的条件表达式
比如
max=(a>b)?a:b
相当于
if(a>b)max=a;
else max=b;

如c=a>b?a:b;
表示如果a>b成立,则c=a;
如果a>b不成立,则c=b;


在C语言中,“?”。“:”是什么意思?视频

相关评论:
  • 13966946822在C语言中?: 是什么意思?
    宣徐爸在C语言中,"?:"这个符号可不是简单的问号,而是一个非常实用的条件运算符。它是C语言中独一无二的三元操作符,它的存在让表达式处理变得更加简洁。这个运算符通常用于在两个可能的表达式之间进行选择,其形式是"表达式1?表达式2:表达式3"。当程序遇到这种形式的表达式时,它会首先计算"表达式1"的...

  • 13966946822c语言中“:”和“?”怎么用
    宣徐爸?与:要组合起来用,这个运算符称为三目运算符,好像是C语言中唯一一个三目运算符。格式:表达式?值:值。比如,a=(b>c)?5:6。就是说b>c这个表达式若为真,则a=5,:符号前的一个值,若为假,则a=6,:符号后一个值。等价于if…else结构。希望我的回答能帮助到你。

  • 13966946822C语言中?:是什么意思?
    宣徐爸?在语言中表示疑问,那么疑问来自于判断。:在语言中表示判断的结果选择,所以编程逻辑就是先进行判断,然后再进行选择。例如,当a>b时,x=1否则x=0,可以写成x=a>b?1:0。在编程领域中,C语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计...

  • 13966946822?: 在 c语言中的意思
    宣徐爸?:是条件运算符;是三元运算符,也是C语言中唯一的一个三元运算符;举例:max=(a>b)? a:b;它是这样执行的:如果(a>b)条件为真,则条件表达式取值a, 否则取b;等价于:if(a>b) max=a;else max=b;注意:1:条件运算符优先于赋值运算符,所以要先算?:再算=;意思就是先求解条件表达式,...

  • 13966946822c语言中?和:是什么意思
    宣徐爸可以理解为条件 ? 结果1 : 结果2 里面的?号是格式要求。也可以理解为是不是条件成立,条件成立为结果1否则为结果2。注意:在C语言中,结果1 和 结果2的类型必须一致。a ? b : c简单理解方式为:if(a) { return b;} else { return c;} 例如:int a = 2;int c = 3;int b = (a ...

  • 13966946822C语言中?和:是什么意思
    宣徐爸是一个语句,判断一个表达式的真假来执行两条代码 比如 int a=9,b=8;a>b?a=8:b=9; \/\/就是这句 相当于if语句吧,问号前面的表达式为真的时候执行a=8,否则b=9;

  • 13966946822C语言中,a
    宣徐爸? :是条件运算符,是C语言中唯一一个三目运算符,一般形式为:表达式1?表达式2:表达式3。1条件运算符的执行顺序,先求解表达式1,若值为真,则求解表达式2,此时表达式2的值就作为整个条件表达式的值,若为假,则求解表达式3的值。2条件运算符的结合方向为自左向右 3条件表达式中,表达式1的类型...

  • 13966946822c++中的?是什么意思.还有:是啥
    宣徐爸C++中,“?”与“:”共同组成三目条件运算符(?:)三目条件运算符(?:)使用例子如下:x ? y:z;上面的三目条件运算的规则是:先计算表达式x的值,若x为真,则整个三目运算的结果是表达式y的值;若x为假,则整个三目运算的结果是表达式z的值。下面的例子为从两个数中找出较大的程序:int a=3,...

  • 13966946822c语言中?是什么意思
    宣徐爸?在语言中表示疑问,那么疑问来自于判断。:在语言中表示判断的结果选择。所以编程逻辑就是先进行判断,然后再进行选择。例如,当a>b时,x=1否则x=0,可以写成x=a>b?1:0。

  • 13966946822请问C语言中的"."、"*"、"->"、"&"都有什么作用和区别?
    宣徐爸代表此时我们声明的变量时指针变量(指针变量的值是地址不是数据),a=&b;表示把变量b的地址赋给指针,此后的"&b",中的‘&’是取地址符号即变量b所在的内存单元的编号。使指针变量指向b所在的内存单元,那么要是用指针使用b的数据即3,可以使用:*a,此时的‘*’代表使用指针变量所指向的值,...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网