Difference in results of bitwise shift calculations
php editor Zimo brings you an article about "The difference in bitwise shift calculation results". In computer programming, bit shift operation is a common operation, which can perform left or right shift operations on binary numbers. However, different programming languages may have differences in processing the results of displacement operations, which requires developers to pay attention. This article will introduce in detail the differences in the results of displacement operations in different programming languages, and provide some examples to help readers better understand and apply displacement operations. Whether you are a beginner or a developer with some programming foundation, you can get useful knowledge and skills from this article.
Question content
There are differences in the output of my go program, specifically the variables x1 and x2. Here is the relevant code snippet:
package main var n uint = 10 const N uint = 10 func main() { var x1 byte = (1 << n) / 100 var x2 byte = (1 << N) / 100 println(x1, x2) }
Expected output: 10 10
Actual output: 0 10
Be curious about the reasons behind the differences and seek explanations.
Solution
Constant expressions are evaluated with unspecified precision. Everything assigned to x2
is constant, so it correctly computes 210 / 100 = 1024 / 100 = 10. Whereas in the first expression, 1 is treated as byte
, which means it is shifted out immediately. 1 must be treated as byte
in Specification:
If the left operand of a non-const shift expression is an untyped constant, it is first implicitly converted to the type assumed when the shift expression is replaced only by its left operand.
1 is the untyped constant on the left and n
is var
making the expression non-const, so 1 must have its assignee x1
Type, i.e. byte
.
The above is the detailed content of Difference in results of bitwise shift calculations. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



short is a primitive data type in Java that represents a 16-bit signed integer in the range -32,768 to 32,767. It is often used to represent small integers, such as counters or IDs, and supports basic arithmetic operations and type conversions. But since short is a signed type, you need to be careful when using division to avoid overflow or underflow.

The IFNULL function checks whether an expression is NULL and returns the specified default value if so, otherwise it returns the value of the expression. It prevents null values from causing errors, allows manipulation of null values, and improves the readability of queries. Usage includes: replacing null values with default values, excluding null values from calculations, and nested usage to handle multiple null value situations.

The char type in Java is used to store a single Unicode character, accounting for 2 bytes, ranging from U+0000 to U+FFFF. It is mainly used to store text characters. It can be initialized through single quotes or Unicode escape sequences, and can participate in comparison, Equality, inequality and join operations can be implicitly converted to int type or explicitly converted to Character objects.

In C language, the behavior of the division operator / depends on the data type of the operands: Integer division: When the operand is an integer, integer division is performed and the result is rounded down. Floating point division: When the operand is a floating point number, floating point division is performed and the result is a floating point number. Type conversion: When one operand is an integer and the other is not, the integer is implicitly converted to a floating point number, and then floating point division is performed. Divisor by 0: A mathematical error occurs when the divisor is 0. Modulo operation: Use the % operator for modulo operation instead of modulo division.

The plus (+) operator in Oracle can be used to: connect strings, numbers, dates, and time intervals; handle NULL values and convert NULL to non-NULL values; convert data types to string types.

The asterisk (*) in MySQL means "all" and has different uses: Select all columns Select all rows JOIN wildcards for table LIKE clause Quantifier implicit type conversion for REGEXP clause

Let’s explore common application scenarios of implicit type conversion! Introduction: In programming languages, implicit type conversion is an automatically performed data type conversion process. In some programming languages, this conversion is performed implicitly, without the need to explicitly tell the compiler or interpreter to perform the conversion. Implicit type conversion has a wide range of application scenarios in programming. This article will discuss some of the common application scenarios. Implicit type conversion in numerical calculations In numerical calculations, operations between different types of data are often required. When different types of data

The C++ function overload matching rules are as follows: match the number and type of parameters in the call. The order of parameters must be consistent. The constness and reference modifiers must match. Default parameters can be used.
