我经常($var & 1)在我的代码中使用,如果$var是奇数则返回true,如果是偶数则返回false.
但"&"究竟做了什么?
我有这样的声明:
假设byte的位值
x是00101011.结果是x>>2什么?
我该如何编程呢?有人能解释我在做什么吗?
我正在阅读关于按位运算符的章节,我遇到了1的补码运算符程序,并决定在Visual C++上运行它.
int main ()
{
unsigned char c = 4, d;
d = ~c;
printf("%d\n", d);
}
Run Code Online (Sandbox Code Playgroud)
它给出了有效的输出: 251
然后我决定直接打印值,而不是d用作变量来保存~c值~c.
int main ()
{
unsigned char c=4;
printf("%d\n", ~c);
}
Run Code Online (Sandbox Code Playgroud)
它给出了输出-5.
它为什么不起作用?
我刚刚在Mozilla Javascript文档中看到了这篇文章:
var len = this.length >>> 0;
Run Code Online (Sandbox Code Playgroud)
我不太明白为什么要这样做.有什么好处呢填零,右移this.length的0呢?据我所知,它什么都没做.它是否安全地为其建立默认值len,即使this.length它不是整数?这可能是这样吗?如果是这样,>> 0和之间的区别是>>> 0什么?
'x << ~y'在JavaScript中代表什么?
我理解按位SHIFT操作执行此操作:
x << y AS x * 2y
而代字号~运算符可以:
~x AS -(x+1)
Run Code Online (Sandbox Code Playgroud)
所以,我假设如下:
5 << ~3 AS 5 * 2-4 or 5 * Math.pow(2, -4)
它应该导致0.3125.
但是,当我运行5 << ~3它时,结果1342177280.
什么是逐步解释?这种操作组合如何以及为什么会导致1342177280而不是0.3125?
(这个问题类似于Stack Overflow问题什么是按位运算符?关于按位运算SHIFT符.)
我面临一个相当特殊的问题.我正在研究一种不支持按位运算的体系结构的编译器.但是,它处理签名的16位整数算术,我想知道是否有可能只使用以下方式实现按位运算:
我希望能够支持的按位操作是:
discrete-mathematics bitwise-operators compiler-optimization
-1 == true; //false
-1 == false //false
-1 ? true : false; //true
Run Code Online (Sandbox Code Playgroud)
谁能解释一下上面的输出?我知道我可以通过比较0来解决这个问题,但我很感兴趣.我希望至少有一个草率的equals语句是真实的,因为它们进行了隐式类型转换,我当然没想到三元组会得出完全不同的结果.
我一直在阅读Kochan的书"Objective-C编程"中的Objective-C中的位运算符.
我对这一部分非常困惑,尽管到目前为止我已经真正了解了大部分内容.
以下是本书的引用:
按位AND运算符
按位AND运算经常用于屏蔽操作.也就是说,可以容易地使用该运算符将数据项的特定位设置为0.例如,语句
w3 = w1 & 3;
Run Code Online (Sandbox Code Playgroud)
w3将w1的值与常数3进行逐位AND运算.这与将w中的所有位设置为相同的效果,除了最右边的两位为0,并保留w1中最右边的两位.
与C中的所有二进制算术运算符一样,二进制位运算符也可以通过添加等号用作赋值运算符.该声明
word &= 15;
Run Code Online (Sandbox Code Playgroud)
因此执行与以下相同的功能:
word = word & 15;
Run Code Online (Sandbox Code Playgroud)
此外,它具有将除最右边的四位字之外的所有字设置为0的效果.当使用常量执行按位运算时,以八进制或十六进制表示法表示常量通常更方便.
好的,这就是我想要了解的内容.现在,我对这整个概念非常困惑,我只想找一点澄清,如果有人愿意帮我解决这个问题.
当书现在引用"设置所有位"时,所有位......究竟是什么.这不仅仅是第二个基数中的0或1,换句话说,二进制?
如果是这样,为什么在第一个例子中除了"最右边2"到0之外的所有位?它是2,因为它是3 - 1,从我们的常数中取3吗?
谢谢!
我知道有>>符号整数的行为可以依赖于实现(具体来说,当左操作数为负时).
怎么样的人:~,>>,&,^,|?当他们的操作数有符号内建类型(整数short,int,long,long long),都将结果保证是相同的(中位含量),好像他们的类型是无符号的?